2011-01-21 23 views
36

¿Alguien puede ayudarme cómo puedo establecer/almacenar valores en el archivo app.config usando C#, es posible?Escribir valores en el archivo app.config

+11

¿Has buscado esto en google? –

+1

¿Podría ser un poco más específico? ¿Qué tipo de valor quieres almacenar y cuándo? En general, no se recomienda almacenar valores de toda la Aplicación (como cadenas o entradas) en la configuración de la aplicación. – Mantisen

+3

Hacer una pregunta que parece estúpida por los profesionales está bien, todo el mundo comienza por el principio. Sin embargo, ni siquiera tomar una búsqueda de Google simpe es simplemente cojo. –

Respuesta

6

Si está utilizando App.Config para almacenar valores en <app Key="" Value="" /> o sección CustomSections use la clase ConfigurationManager, de lo contrario use la clase XMLDocument.

Usted podría utilizar el código publicado en CodeProject

2

Sí se puede - ver ConfigurationManager

El ConfigurationManager clase incluye a los miembros que le permiten realizar las siguientes tareas:

  • leer y escribir archivos de configuración en su conjunto.

aprender a usar el docs, que debe ser su primer puerto de llamada para una pregunta como esta.

32

Pruebe el siguiente código:

Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath); 
    config.AppSettings.Settings.Add("YourKey", "YourValue"); 
    config.Save(ConfigurationSaveMode.Minimal); 

Funcionó para mí :-)

+0

Gracias, el espacio de nombre es System.Configuration. Entonces System.Configuration.Configuration config = .... – Rob

+0

"Acceso denegado a la ruta" cuando intenté instalarlo. Pero cuando lo intento en Visual Studio funciona bien. Me puedes ayudar. – Reynan

16

En el marco 4.5 [ "clave" AppSettings.Settings ] parte de ConfigurationManager es de solo lectura, así que tuve que quitar primero la clave y luego agregarla usando lo siguiente:

Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath); 

config.AppSettings.Settings.Remove("MySetting"); 
config.AppSettings.Settings.Add("MySetting", "some value"); 

config.Save(ConfigurationSaveMode.Modified); 

No se preocupe, no obtendrá una excepción si intenta Eliminar una clave que no existe.

Este post da un buen consejo

10
private static string GetSetting(string key) 
    { 
     return ConfigurationManager.AppSettings[key]; 
    } 

    private static void SetSetting(string key, string value) 
    { 
     Configuration configuration = 
      ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
     configuration.AppSettings.Settings[key].Value = value; 
     configuration.Save(ConfigurationSaveMode.Full, true); 
     ConfigurationManager.RefreshSection("appSettings"); 
    } 
+0

Tuve que agregar configuration.AppSettings.Settings.Add (value); before configuration.AppSettings.Settings [key] .Value = value; para hacer que esto funcione cuando el archivo .config estaba vacío. –

+0

Al usar 'Settings.Add()', si la entrada no existe, se agregará, si ya existe, el valor se agregará a los valores existentes separados por una coma. P.ej. después de llamar 'Settings.Add (" myKey "," test ")' 4 veces, su entrada se convertirá en: '' – Stacked

+0

ConfigurationManager.RefreshSection ("appSettings "); era la clave para mí, si no haces eso, leer valores recién escritos no funcionará. –

0
 string filePath = System.IO.Path.GetFullPath("settings.app.config"); 

     var map = new ExeConfigurationFileMap { ExeConfigFilename = filePath }; 
     try 
     { 
      // Open App.Config of executable 
      Configuration config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None); 

      // Add an Application Setting if not exist 

       config.AppSettings.Settings.Add("key1", "value1"); 
       config.AppSettings.Settings.Add("key2", "value2"); 

      // Save the changes in App.config file. 
      config.Save(ConfigurationSaveMode.Modified); 

      // Force a reload of a changed section. 
      ConfigurationManager.RefreshSection("appSettings"); 
     } 
     catch (ConfigurationErrorsException ex) 
     { 
      if (ex.BareMessage == "Root element is missing.") 
      { 
       File.Delete(filePath); 
       return; 
      } 
      MessageBox.Show(ex.Message); 
     } 
2

Para una aplicación de consola .NET 4.0, ninguno de ellos trabajó para mí. Así que utilicé la siguiente continuación y funcionó:

private static void UpdateSetting(string key, string value) 
{ 
    Configuration configuration = ConfigurationManager. 
     OpenExeConfiguration(Assembly.GetExecutingAssembly().Location); 
    configuration.AppSettings.Settings[key].Value = value; 
    configuration.Save(); 

    ConfigurationManager.RefreshSection("appSettings"); 
} 
2

intente lo siguiente:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);    
config.AppSettings.Settings[key].Value = value; 
config.Save(); 
ConfigurationManager.RefreshSection("appSettings"); 
4

Como otros han mencionado, se puede hacer esto con ConfigurationManager.AppSettings.Settings. Pero: El uso de Settings[key] = value no funcionará si la clave no existe.
Usando Settings.Add(key, value), si la clave ya existe, se unirán al nuevo valor a su valor (s) separados por una coma, algo así como <add key="myKey" value="value1, value2, value3" />

Para evitar estos resultados inesperados, usted tiene que manejar dos escenarios de

  • ¿Si la entrada con la clave dada existe? luego actualiza su valor
  • si la entrada con la clave dada no existe?a continuación, crear nueva entrada (clave, valor)

Código

public static void Set(string key, string value) 
{ 
    var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 

    var entry = config.AppSettings.Settings[key]; 
    if (entry == null) 
     config.AppSettings.Settings.Add(key, value); 
    else 
     config.AppSettings.Settings[key].Value = value; 

    config.Save(ConfigurationSaveMode.Modified); 
} 

Para obtener más información sobre el cheque entry == null, comprobar this post.
Espero que esto ayude a alguien.

Cuestiones relacionadas