2009-08-31 14 views
17

Deseo modificar un valor en la sección appSetting en app.config. Así que escribí,Cambie el valor en el archivo app.config dinámicamente

Console.WriteLine(ConfigurationManager.AppSettings["name"]); 
Console.Read(); 
Configuration config=ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
config.AppSettings.Settings["name"].Value = "raja";  
config.Save(ConfigurationSaveMode.Modified); 
ConfigurationManager.RefreshSection("appSettings"); 
Console.WriteLine(ConfigurationManager.AppSettings["name"]); 
Console.Read(); 

después de la ejecución de código anterior, verifiqué el app.config si el valor del elemento "nombre" se ha cambiado o no. pero no hay cambio

¿Cuál es el problema con mi código? o hay alguna otra forma de hacer esto?

+2

Cambia sólo en el nivel en memoria. no está actualizando el nivel físico (en el nivel de archivo) – Partha

+3

No debe hacer eso. La configuración del nivel de la aplicación no debe modificarse (por eso no hay soporte para eso), pero debe usar la configuración del nivel de usuario. –

+0

Revisa este enlace. debería resolver tu problema. http://stackoverflow.com/questions/11149556/c-sharp-app-config-change-value – Indira

Respuesta

1

Funciona, basta con mirar la carpeta bin/Debug, probablemente esté mirando el archivo app.config dentro del proyecto.

+1

sí, pero ¿cómo puedo consultar allí? en mi caso, los mismos valores están ahí que antes de la actualización? –

5

tiene que actualizar su archivo app.config manualmente

// Load the app.config file 
XmlDocument xml = new XmlDocument(); 
xml.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile); 

// Do whatever you need, like modifying the appSettings section 

// Save the new setting 
xml.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile); 

Y a continuación, informe a su aplicación para recargar cualquier sección modificó

ConfigurationManager.RefreshSection("appSettings"); 
+2

Tenga en cuenta cualquier problema de seguridad al actualizar un archivo que probablemente se encuentre en Archivos de programa. En Vista, necesita un permiso elevado para escribir en un archivo en Archivos de programa. –

41

Este código funciona para mí:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
    config.AppSettings.Settings["test"].Value = "blah";  
    config.Save(ConfigurationSaveMode.Modified); 
    ConfigurationManager.RefreshSection("appSettings"); 

Nota: no actualiza el elemento de solución 'app.config', pero el archivo '.exe.config' está en el bin/f más antiguo si lo ejecuta con F5.

+0

Esto ayudó, gracias por la respuesta. – fuzz

+0

Amigo es genial, T.Hanks! –

+0

Esto no funciona. Todavía no muestra que la configuración haya cambiado hasta que vuelva a ejecutar la aplicación. No estoy seguro de lo que está pasando. –

0

Probar:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
config.AppSettings.Settings.Remove("configFilePath"); 
config.AppSettings.Settings.Add("configFilePath", configFilePath); 
config.Save(ConfigurationSaveMode.Modified,true); 
config.SaveAs(@"C:\Users\USERNAME\Documents\Visual Studio 2010\Projects\ADI2v1.4\ADI2CE2\App.config",ConfigurationSaveMode.Modified, true); 
4

Ampliando el ejemplo de Adis H para incluir el caso nulo (tiene poco en éste)

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
      if (config.AppSettings.Settings["HostName"] != null) 
       config.AppSettings.Settings["HostName"].Value = hostName; 
      else     
       config.AppSettings.Settings.Add("HostName", hostName);     
      config.Save(ConfigurationSaveMode.Modified); 
      ConfigurationManager.RefreshSection("appSettings"); 
Cuestiones relacionadas