2009-02-10 14 views
7

¿Hay alguna manera de que pueda especificar en tiempo de ejecución el archivo de configuración que me gustaría usar (que no sea App.config)? Por ejemplo, me gustaría leer un primer argumento de una línea de comando que será una ruta de acceso a la configuración de la aplicación y me gustaría que mi aplicación se refiriera a él cuando uso ConfigurationManager.AppSettings (Probablemente sea imposible, pero aún así vale la pena preguntar).
he encontrado este pedazo de código:.NET archivo de configuración propio

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

Funciona, pero anula la sección AppSettings del App.config original y no se supone que mi solicitud de escribir nada.

Respuesta

9

Encontré esto y funciona. "ruta" es una ruta al archivo de configuración.

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

No directamente.

Indirectamente, usted podría:

  • giro hasta una segunda AppDomain, especifique la configuración en archivos para que (AppDomainSetup.ConfigurationFile), y ejecutar el código en el dominio de aplicación
  • tener dos exes; la primera (foo.exe) simplemente copia la configuración (en bar.exe.config) y conchas de la segunda exe (bar.exe) [Advertencia: raza hilo]
+0

¿qué quiere decir con "ejecutar código en el dominio de la aplicación"? – agnieszka

+0

Ese es un gran tema ... básicamente, en .NET tiene un nivel de abstracción dentro de un Proceso: el Dominio de la Aplicación. Ver msdn: http://msdn.microsoft.com/en-us/library/yb506139.aspx –

0

Si está usando log4net puede especificar el archivo de configuración en los AssemblyInfo.cs

0

Otra solución es refactorizar y crear su propio ConfigurationRepository. Luego puede cambiar en tiempo de ejecución qué implementación de repositorio específico usará. Por ejemplo, AppConfigRepository : ConfigurationRespository será una fachada para el antiguo ConfigurationManager.AppSettings["key"].

+0

Ya lo sé pero estoy buscando algo más simple para que no reinvente la rueda (si existe;) – agnieszka

Cuestiones relacionadas