2009-02-10 14 views
7

Esiste un modo per specificare in fase di esecuzione il file di configurazione che desidero utilizzare (diverso da App.config)? Per esempio vorrei leggere un primo argomento da una riga di comando che sarà un percorso alla configurazione dell'applicazione e vorrei che la mia applicazione si riferisse ad esso quando utilizzo ConfigurationManager.AppSettings (Probabilmente è impossibile ma vale comunque la pena chiedere).
ho trovato questo pezzo di codice:File di configurazione proprio .NET

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

Funziona, ma ignora la sezione AppSettings l'originale del App.config e la mia domanda non dovrebbe scrivere nulla.

risposta

9

Ho trovato questo e funziona. "percorso" è un percorso per il file di configurazione.

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

Non direttamente.

Indirettamente, si potrebbe:

  • spin up un secondo AppDomain, specificare il file-config per questo (AppDomainSetup.ConfigurationFile), ed eseguire il codice nel dominio applicazione
  • avere due ex fidanzati; i primi (foo.exe) copia semplicemente la configurazione (in bar.exe.config) e conchiglie 2 ° exe (bar.exe) [Warning: gara thread]
+0

cosa intendi per "codice di esecuzione nel dominio dell'app"? – agnieszka

+0

Questo è un grande argomento ... in pratica, in .NET hai un livello di astrazione all'interno di un processo: l'AppDomain. Vedere msdn: http://msdn.microsoft.com/en-us/library/yb506139.aspx –

0

Se stai usando log4net è possibile specificare il file di configurazione nelle AssemblyInfo.cs

0

Un'altra soluzione è quella di refactoring e creare il proprio ConfigurationRepository. Quindi è possibile modificare in fase di esecuzione quale specifica implementazione del repository verrà utilizzata.

Ad esempio, AppConfigRepository : ConfigurationRespository sarà solo una facciata per il vecchio ConfigurationManager.AppSettings["key"].

+0

Lo so già ma sto cercando qualcosa di più semplice in modo da non reinventare la ruota (se esiste;)) – agnieszka

Problemi correlati