2009-05-29 11 views
55

tengo que insertar pares de valores clave en App.config de la siguiente manera:Añadir a los valores App.config y recuperarlos

<configuration> 
<appSettings> 
    <add key="Setting1" value="Value1" /> 
    <add key="Setting2" value="Value2" /> 
</appSettings> 
</configuration> 

Cuando busqué en Google me dieron el siguiente fragmento de código

System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); // Add an Application Setting. 

config.AppSettings.Settings.Add("ModificationDate", 
       DateTime.Now.ToLongTimeString() + " "); 

// Save the changes in App.config file. 

config.Save(ConfigurationSaveMode.Modified); 

El código anterior no funciona ya que ConfigurationManager no se encuentra en System.Configuration namespace Estoy usando .NET 2.0. Cómo agregar pares clave-valor a la aplicación.Config programáticamente y recuperarlos?

+4

Sólo una nota para cualquiera que lea esto que config.Save (ConfigurationSaveMode.Modified) sólo se guarda el valor si la clave está predefinido en el archivo app.config. Para crear uno nuevo, debe usar simplemente use config.Save() sin parámetros. – ryanulit

Respuesta

44

¿Echas de falta la referencia a System.Configuration.dll? ConfigurationManager clase se encuentra allí.

EDITAR: El espacio de nombres System.Configuration tiene clases en mscorlib.dll, system.dll y en system.configuration.dll. Su proyecto siempre incluye las referencias mscorlib.dll y system.dll, pero system.configuration.dll debe agregarse a la mayoría de los tipos de proyectos, ya que no está allí por defecto ...

+2

¡Eso me pone a veces! Sigo pensando que todo lo que necesito es usar :( – crashmstr

8

Intente agregar una referencia al System.Configuration, obtiene parte del espacio de nombres de configuración haciendo referencia al espacio de nombres del sistema, al agregar la referencia a System.Configuration debería permitirle acceder al ConfigurationManager.

8

Esto funciona.

public static void AddValue(string key, string value) 
    { 
     Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath); 
     config.AppSettings.Settings.Add(key, value); 
     config.Save(ConfigurationSaveMode.Minimal); 
    } 
+0

si quieres acceder a este valor que acabas de agregar en el código más tarde sin reiniciar tu aplicación, debes llamar a 'ConfigurationManager.RefreshSection (" appSettings ");' después esta. – propagated

4

Espero que esto funcione:

System.Configuration.Configuration config= ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 

config.AppSettings.Settings["Yourkey"].Value = "YourValue"; 
config.Save(ConfigurationSaveMode.Modified); 
0

lo siento por la respuesta tardía pero puede ser mi código puede ayudar a u.

coloqué 3 botones en la superficie de la forma de la cubierta. button1 & 2 configurará un valor diferente y button3 recuperará el valor actual. así que cuando ejecute mi código primero agregue la referencia System.configuration

y haga clic en el primer botón y luego haga clic en el 3er botón para ver qué valor se ha configurado. la próxima vez otra vez, haga clic en el segundo & 3er botón para ver nuevamente qué valor se ha configurado después del cambio.

así que aquí está el código.

using System.Configuration; 

private void button1_Click(object sender, EventArgs e) 
     { 
      Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath); 
      config.AppSettings.Settings.Remove("DBServerName"); 
      config.AppSettings.Settings.Add("DBServerName", "FirstAddedValue1"); 
      config.Save(ConfigurationSaveMode.Modified); 
     } 

     private void button2_Click(object sender, EventArgs e) 
     { 
      Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath); 
      config.AppSettings.Settings.Remove("DBServerName"); 
      config.AppSettings.Settings.Add("DBServerName", "SecondAddedValue1"); 
      config.Save(ConfigurationSaveMode.Modified); 
     } 

     private void button3_Click(object sender, EventArgs e) 
     { 
      Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath); 
      MessageBox.Show(config.AppSettings.Settings["DBServerName"].Value); 
     }