Tengo el siguiente problema: estoy introduciendo una nueva característica en la aplicación (ejecutada como servicio de Windows) y me gustaría tener esa nueva característica controlada (activar/desactivar) usando algún tipo de archivo de configuración entrada (myKey). Puedo almacenar la entrada de configuración en app.config, pero si quiero cambiarlo de on-> off o de lo contrario, requerirá reiniciar el servicio de Windows, y quiero evitarlo. Quiero que mi aplicación se ejecute y recoger los cambios en la configuración.Cambio en la configuración de la aplicación sin reinicio de la aplicación
La pregunta es: ¿existe un mecanismo de compilación en .NET que resuelva ese problema? Supongo que podría crear mi propio archivo de configuración, luego usar FileSystemWatcher
etc ... ¿Pero quizás .NET permite usar archivos de configuración externos y volverá a cargar el valor?
ConfigurationManager.AppSettings["myKey"]
Gracias, Pawel
EDIT 1: Gracias por las respuestas. Sin embargo escribí siguiente fragmento y no funciona (He intentado crear appSettingSection en ambos lugares: antes y en el interior circular):
static void Main(string[] args)
{
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
// AppSettingsSection appSettingSection = (AppSettingsSection)config.GetSection("appSettings");
for (int i = 0; i < 10; i++)
{
ConfigurationManager.RefreshSection("appSettings");
AppSettingsSection appSettingSection = (AppSettingsSection)config.GetSection("appSettings");
string myConfigData = appSettingSection.Settings["myConfigData"].Value; // still the same value, doesn't get updated
Console.WriteLine();
Console.WriteLine("Using GetSection(string).");
Console.WriteLine("AppSettings section:");
Console.WriteLine(
appSettingSection.SectionInformation.GetRawXml()); // also XML is still the same
Console.ReadLine();
}
}
puedo editar manualmente el archivo de configuración cuando la aplicación se detiene en Console.ReadLine().
Gracias! Pero aún así: de esa forma, cada vez que accedo a myConfigData tendría que crear un nuevo objeto de configuración para asegurarme de que appConfig.AppSettings.Settings ["myConfigData"]. Value sea coherente con el valor subyacente en el archivo app.config? – dragonfly
Simplemente llame a 'ConfigurationManager.RefreshSection (" appSettings ");' antes de llamar a 'appConfig.AppSettings.Settings [" myConfigData "]. Value;' lo que obligará a la aplicación a leer las configuraciones nuevas y modificadas. De lo contrario, 'ConfigurationManager' inherentemente guarda en caché todos los valores. –
@TeomanSoygul 'RefreshSection'call actualiza el valor recuperado a través de' ConfigurationManager.AppSettings [] 'no afecta a una instancia de configuración. – SerG