2010-03-17 14 views
8

Necesito volver a cargar el archivo de configuración después de modificarlo. ¿Cómo se puede hacer esto usando appdomains? Una muestra de código sería útil.Recarga del archivo de configuración .NET

+0

lo que realmente necesita para recargar el archivo de configuración después de hacer ¡algunos cambios!?, no sé, solo estoy preguntando, porque recuerdo haber leído algo de lo que no necesitamos volver a cargar. ¡Gracias! –

+0

¿Qué tipo de programa es este? Servicio de Windows? ASP.NET? –

+0

posible duplicado de [Volver a cargar la configuración de un archivo de configuración externo durante el tiempo de ejecución] (http://stackoverflow.com/questions/4934898/reload-configuration-settings-from-an-external-config-file-during-run -time) –

Respuesta

1

Sí, es posible ... dependiendo de CÓMO accede al archivo de configuración.

Si confía en el comportamiento predeterminado, entonces la respuesta es NO.

Sin embargo, si accede a la configuración a través de una propiedad static del método común para su proyecto, entonces es posible volver a cargarlo.

No tengo el fragmento de código ahora, pero hice algo similar incluso con un FileSystemWatcher para detectar cambios en el archivo config.

Hay una advertencia, solo funciona con las propiedades a las que se accede directamente a través de su código, la configuración automática no se volverá a cargar cuando lo haga.

0

Realmente he encontrado la solución al problema dado. A continuación se presentan las líneas de código fiew de cómo se puede hacer esto:

  AppDomainSetup domaininfo = new AppDomainSetup(); 

      domaininfo.ApplicationBase = System.Environment.CurrentDirectory; 
      domaininfo.ConfigurationFile = "Target_Config.exe.config"; 

      Evidence adevidence = AppDomain.CurrentDomain.Evidence; 

      AppDomain dom = AppDomain.CreateDomain("test", adevidence, domaininfo); 

      var someType =(SomeType)dom.CreateInstanceAndUnwrap("Target_Assembly", 
       "Target_Assembly.SomeType"); 

El punto clave aquí es la clase AppDomainSetup, lo que permite establecer la propiedad ConfigurationFile en el conjunto que se creará. Ahora, podemos monitorear el archivo de configuración "Target_Config.exe.config" para ver los cambios. Cuando se cambia, el appdomain creado anteriormente debe descargarse y luego volver a crearse.

+0

Esta es probablemente una solución para reutilizar un archivo de configuración en varias aplicaciones sin copiarlo para cada aplicación. – Markus

7

Digamos que usted tiene el siguiente fichero de configuración:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
    <add key="test" value="1" /> 
    </appSettings> 
</configuration> 

Probemos el primer enfoque ingenuo. La siguiente aplicación intentará agarrar el valor de la appSetting llamado test una vez por segundo, e imprimir su valor:

static void Main(string[] args) 
{ 
    while(true) 
    { 
     Console.WriteLine(ConfigurationManager.AppSettings["test"]); 
     Thread.Sleep(1000); 
    } 
} 

Pero, por desgracia! Mientras esto se está ejecutando, notará que continúa imprimiendo 1, y no recoge ningún cambio.

Si actualiza su código a la siguiente, se van a resolver ese problema, y ​​recogerá los cambios cada vez que se cambie:

static void Main(string[] args) 
{ 
    while(true) 
    { 
     ConfigurationManager.RefreshSection("appSettings"); 
     Console.WriteLine(ConfigurationManager.AppSettings["test"]); 
     Thread.Sleep(1000); 
    } 
} 
+0

Lástima que esta publicación no se haya marcado como respuesta. Tiendo a preferir más respuestas de "verbose", pero bueno, soy solo yo. –

1
ConfigurationManager.RefreshSection("configuration"); 
    Properties.Settings.Default.Reload(); 
Cuestiones relacionadas