2009-02-10 3 views
7

Czy jest jakiś sposób, abym mógł określić w czasie wykonywania plik konfiguracyjny, który chciałbym użyć (inny niż App.config)? Na przykład chciałbym przeczytać pierwszy argument z wiersza poleceń, który będzie ścieżką do konfiguracji aplikacji i chciałbym, aby moja aplikacja odwoływała się do niego podczas korzystania z ConfigurationManager.AppSettings (Jest to prawdopodobnie niemożliwe, ale mimo to warto o to zapytać).
znalazłem ten kawałek kodu:. Własny plik konfiguracyjny .NET

System.Configuration.Configuration config 
    = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
     config.AppSettings.File = myRuntimeConfigFilePath; 
     config.Save(ConfigurationSaveMode.Modified); 
     ConfigurationManager.RefreshSection("appSettings"); 

To działa, ale zastępuje sekcję AppSettings oryginalnego app.config i moja aplikacja nie ma nic pisać.

Odpowiedz

9

Znalazłem to i działa. "ścieżka" to ścieżka do pliku konfiguracyjnego.

AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", path); 
4

Nie bezpośrednio.

Pośrednio, można:

  • wirowania się drugi AppDomain określ plik konfiguracyjny za to (AppDomainSetup.ConfigurationFile), a wykonanie kodu w domenie aplikacji
  • dwa EXE; Pierwszy (foo.exe), po prostu kopiuje config (język bar.exe.config) i muszle 2. exe (bar.exe) [ostrzeżenie: gwint wyścig]
+0

co masz na myśli przez "wykonanie kodu w domenie aplikacji"? – agnieszka

+0

To jest duży temat ... w zasadzie w .NET masz poziom abstrakcji wewnątrz Procesu - AppDomain. Zobacz msdn: http://msdn.microsoft.com/en-us/library/yb506139.aspx –

0

Jeśli używasz log4net można określić plik konfiguracyjny w AssemblyInfo.cs

0

Innym rozwiązaniem jest refaktoryzacja i stworzenie własnego ConfigurationRepository. Następnie możesz w czasie wykonywania zmienić, z jakiej konkretnej implementacji repozytorium będziesz korzystać.

Na przykład AppConfigRepository : ConfigurationRespository będzie po prostu fasadą dla starej wersji ConfigurationManager.AppSettings["key"].

+0

Już wiem o tym, ale szukam czegoś prostszego, więc nie odkrywam ponownie koła (jeśli istnieje;)) – agnieszka