2009-02-10 3 views
7

Gibt es eine Möglichkeit, dass ich zur Laufzeit die Konfigurationsdatei angeben könnte, die ich verwenden möchte (außer App.config)? Zum Beispiel möchte ich ein erstes Argument von einer Befehlszeile lesen, das ein Pfad zur Konfiguration der Anwendung sein wird, und ich möchte, dass meine Anwendung darauf verweist, wenn ich ConfigurationManager.AppSettings verwende (es ist wahrscheinlich unmöglich, aber es lohnt sich, danach zu fragen).
Ich habe dieses Stück Code finden:.NET eigene Konfigurationsdatei

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

Es funktioniert, aber es überschreibt die ursprünglichen AppSettings Abschnitt und meine Anwendung App.config soll, nichts schreiben.

Antwort

9

Ich fand dies und es funktioniert. "Pfad" ist ein Pfad zur Konfigurationsdatei.

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

Nicht direkt.

Indirekt konnte man:

  • Spin ein zweites AppDomain, geben Sie die config-Datei für das (AppDomainSetup.ConfigurationFile) nach oben, und den Code in der Anwendungsdomäne ausführen
  • haben zwei exes; die erste (foo.exe) kopiert einfach die Config (in bar.exe.config) und Muscheln der zweite exe (bar.exe) [Warnung: Thread-Rennen]
+0

Was meinen Sie mit "Code in der App-Domäne ausführen"? – agnieszka

+0

Das ist ein großes Thema ... im Grunde haben Sie in .NET ein Abstraktionsniveau innerhalb eines Prozesses - der AppDomain. Siehe msdn: http://msdn.microsoft.com/en-us/library/yb506139.aspx –

0

Wenn Sie log4net verwenden können Sie Ihre Konfigurationsdatei in der AssemblyInfo.cs angeben

0

Eine andere Lösung ist Refactor und erstellen Sie Ihre eigenen ConfigurationRepository. Dann können Sie zur Laufzeit ändern, welche spezifische Repository-Implementierung Sie verwenden möchten.

Zum Beispiel AppConfigRepository : ConfigurationRespository wird nur eine Fassade für die alte ConfigurationManager.AppSettings["key"] sein.

+0

Ich weiß bereits darüber, aber ich bin auf der Suche nach etwas einfacher, so dass ich das Rad nicht neu erfinden (wenn es existiert;)) – agnieszka