2013-03-03 11 views
6

Mam kilka aplikacji konsoli C#, które muszą mieć ten sam zestaw ustawień. Chcę uniknąć obłudy i unikać oddzielnego app.config dla każdej aplikacji.Common app.config dla wielu aplikacji

Czy istnieje jakiś sposób, aby odczytać wspólną app.config plik (słownie common.config) dla aplikacji (app1.exe, app2.exe).

+0

możliwy duplikat [Czy wiele aplikacji C# może korzystać z jednego pliku App.Config?] (http://stackoverflow.com/questions/9811414/can-multiple-c-shar p-apps-use-one-app-config-file) –

+0

Naprawdę nie powinieneś próbować tego robić. Plik konfiguracyjny powinien istnieć w swojej własnej przestrzeni unikalnej dla aplikacji. –

Odpowiedz

5

można załadować zewnętrznego app.config za pomocą poniższego kodu:

config = ConfigurationManager.OpenExeConfiguration(Path.Combine("C:\test\root", "Master.exe")); 
string logpath = config.AppSettings.Settings["Log.Path"].Value; 

i zapisać ustawienia jako tak:

config = ConfigurationManager.OpenExeConfiguration(Path.Combine("C:\test\root", "Master.exe")); 
config.AppSettings.Settings["Log.Path"].Value = "C:\newpath"; 
config.Save(); 

Można mieć config głównego w jednej z aplikacji i wskazać resztę na to. Zwykle ta metoda jest jednak uważana za złą praktykę. Mogą występować problemy z różnymi aplikacjami blokującymi plik.

+0

Kod działa, nawet jeśli nie ma pliku master.exe? –

+0

Nie próbowałem tego w ten sposób. Musiałbyś eksperymentować. Zawsze można utworzyć bibliotekę klas z głównym plikiem konfiguracyjnym. Następnie w tej bibliotece utwórz akcesorium, a we wszystkich innych projektach odwołaj się do tej biblioteki. Następnie użyj narzędzia do pobierania danych. –

8

Utwórz jeden plik o nazwie app.config. Umieść go w jakimś miejscu poza katalogami twojego projektu, jak w katalogu rozwiązań. Dodaj go do swoich projektów jako powiązany obiekt ze względną ścieżką do pliku. Ustaw właściwą akcję kompilacji dla tego elementu (konfiguracja aplikacji) w każdym projekcie.

Teraz, gdy każdy projekt zostanie skompilowany, plik zostanie skopiowany do wyjściowego katalogu projektu z poprawną nazwą.

4

@ Ran's answer to opcja, ale każda aplikacja będzie nadal mieć swój własny plik konfiguracyjny po kompilacji. W czasie kompilacji będą one takie same, ale w czasie wdrażania będą kopiami.

Można również otworzyć plik konfiguracyjny jedna aplikacja jest z innej aplikacji przy użyciu: ConfigurationManager.OpenExeConfiguration(string)

Można mieć zewnętrzny plik konfiguracyjny, że wszystkie aplikacje odwoływać przy użyciu: ConfigurationManager.OpenMappedExeConfiguration

i istnieje możliwość, aby za pomocą urządzenia plik konfiguracyjny za pomocą: ConfigurationManager.OpenMachineConfiguration()