Te sugerimos que revises esta resolución en un ambiente controlado antes de enviarlo a producción, saludos.
Solución:
Bueno, todavía no he querido cambiar la configuración de la aplicación en tiempo de ejecución (para eso uso la configuración de usuario), pero lo que he podido hacer es escribir la configuración de la aplicación en el momento de la instalación. Me imagino que un enfoque similar podría funcionar en tiempo de ejecución. Podría probarlo ya que no parece haber ninguna otra solución ATM propuesta.
exePath = Path.Combine( exePath, "MyApp.exe" );
Configuration config = ConfigurationManager.OpenExeConfiguration( exePath );
var setting = config.AppSettings.Settings[SettingKey];
if (setting != null)
setting.Value = newValue;
else
config.AppSettings.Settings.Add( SettingKey, newValue);
config.Save();
¡Espero que ayude!
Este es el método que le permite cambiar las entradas en el
:
internal static bool SetSetting(string Key, string Value)
bool result = false;
try
System.Configuration.Configuration config =
ConfigurationManager.OpenExeConfiguration(
ConfigurationUserLevel.None);
config.AppSettings.Settings.Remove(Key);
var kvElem= new KeyValueConfigurationElement(Key, Value);
config.AppSettings.Settings.Add(kvElem);
// Save the configuration file.
config.Save(ConfigurationSaveMode.Modified);
// Force a reload of a changed section.
ConfigurationManager.RefreshSection("appSettings");
result = true;
finally
return result;
// function
Nota que he encontrado es necesario refrescar la sección appSettings
después de la actualización.
La función elimina un key antes de agregarlo para evitar entradas dobles. Esto funciona también si el key no existe previamente. Si hay algún error vuelve falsesobre el éxito true. El método para leer la configuración es trivial y solo se enumera para completar:
internal static string GetSetting(string Key)
string result = null;
try
result = ConfigurationManager.AppSettings[Key];
finally
return result;
// function
Nota que lo he rodeado de un intentar … finalmente bloque para suprimir errores. Si se produce algún error, GetSetting simplemente devuelve null mientras SetSetting regresa false. Eso facilita el manejo, sin embargo, si necesita las excepciones, aún puede agregar
catch (Exception) throw;
para lanzar la excepción a la persona que llama. O, para la depuración, podría agregar:
#if DEBUG
catch (Exception ex)
System.Diagnostics.Debug.WriteLine(ex.ToString());
#endif
Que mostrará la excepción en el Producción ventana de Visual Studio si ha seleccionado la configuración “Depurar”, pero continuará con el código.
Nota (referencia cruzada a un tema similar):
-
Él Configuraciones de la aplicación La sección es diferente, ya que distingue entre el alcance de “Usuario” y “Aplicación” y admite diferentes tipos de datos, no solo cadenas. Si quieres saber cómo puedes manejar Configuraciones de la aplicaciónpuede encontrarlo aquí (en stackoverflow):
como acceder Configuraciones de la aplicación -
Si no está seguro de si debe usar
AppSettings
oapplicationSettings
entonces Lee esto antes de que lo decidas. -
Si encuentra la advertencia
'ConfigurationSettings.AppSettings' is obsolete
entonces esta pista te puede ayudar. -
Si estás usando el Núcleo de .NET marco, echa un vistazo a este enlace: AppSettings en .NET Core
Las aplicaciones WPF pueden acceder al archivo app.config al igual que las aplicaciones WinForms a través del
ConfigurationManager.OpenExeConfiguration()
método. El truco es tener los valores a los que desea acceder en la etiqueta AppSettings de su archivo App.config (también disponible en aplicaciones WPF).
El truco de todo esto es asegurarse de llamar a los siguientes métodos cuando haya terminado de modificar sus propiedades:
MyConfig.Save(ConfigurationSaveMode.Modified)
ConfigurationManager.RefreshSection("appSettings")
Escribí un “cómo” completo sobre esto hace un tiempo que lo explica todo aquí.
Te mostramos reseñas y valoraciones
Si aceptas, tienes la habilidad dejar una crónica acerca de qué te ha parecido esta crónica.