¿Cómo almacenar pares clave-valor en la configuración de la aplicación en tiempo de ejecución?
-
05-07-2019 - |
Pregunta
¿Cómo se pueden almacenar pares dinámicos de valores clave-clave en app.config al usar la API de configuración de la aplicación, en tiempo de ejecución?
He estado tratando de entender, y no puedo encontrar ningún ejemplo o documentación significativa.
Parece que las clases de diccionario .Net no se pueden serializar en XML para almacenarlas en app.config
¿Es la única forma de hacerlo usando clases serializadas XML personalizadas, o hay alguna otra forma?
Solución 2
Después de buscar más en la red, encontré un artículo muy bueno (aunque muy largo) que describe en profundidad el modelo de configuración .Net:
Desentrañando los misterios de la configuración de .NET 2.0
También encontré algo muy útil:
Diseñador de la sección de configuración
Un estudio visual que se agrega para diseñar visualmente las secciones de configuración y generar los archivos XSD correspondientes. Espero que alguien encuentre esto útil.
Otros consejos
Deberías poder hacer algo como esto:
// Open App.Config of executable
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
// Add an Application Setting with a name Key and a Value stored in variable called Value
config.AppSettings.Settings.Add("Key", Value );
// Save the changes in App.config file.
config.Save(ConfigurationSaveMode.Modified);
Siempre pensé que se consideraba una mala práctica cambiar app.config durante el tiempo de ejecución. La app.config se debe usar para la instalación y configuración del programa; no para cosas dinámicas que la aplicación está modificando realmente.
Sugiero que cree por separado " KeyValue.xml " archivo para objetos dinámicos.
Dependiendo de lo que necesite exactamente, puede probar System.Collections.ObjectModel.KeyedCollection < TKey, TValue > ;. Esto solo funciona si puede derivar la clave de un elemento del propio elemento, pero en ese caso, está bien para este propósito.
¿Es un diccionario genérico? Si es así: