2011-03-29 11 views
19

En mi app.config que tienen esta sección¿Cómo modificar mis claves App.exe.config en tiempo de ejecución?

<appSettings> 
    <add key ="UserId" value ="myUserId"/> 
    // several other <add key>s 
</appSettings> 

Por lo general acceder a los valores utilizando userId = ConfigurationManager.AppSettings["UserId"]

Si modifico usando ConfigurationManager.AppSettings["UserId"]=something, el valor no se guarda en el archivo, y cargar la próxima vez la aplicación, usa el valor anterior.

¿Cómo puedo cambiar el valor de algunas teclas app.config durante el tiempo de ejecución?

+0

añadí código C# de ese código vb en mi respuesta –

Respuesta

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

config.AppSettings.Settings["UserId"].Value = "myUserId";  
config.Save(ConfigurationSaveMode.Modified); 

Usted puede leer sobre ConfigurationManager here

+1

También debe tener lo siguiente después de ese código: ConfigurationManager.RefreshSection ("appSettings"); – SimonD

2

Modifying app.config File

using Microsoft.VisualBasic; 
using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.Data; 
using System.Diagnostics; 
using System.Configuration; 
using System.Xml; 

public class AppConfigFileSettings 
{ 


    public static void UpdateAppSettings(string KeyName, string KeyValue) 
    { 
     XmlDocument XmlDoc = new XmlDocument(); 

     XmlDoc.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile); 

     foreach (XmlElement xElement in XmlDoc.DocumentElement) { 
      if (xElement.Name == "appSettings") { 

       foreach (XmlNode xNode in xElement.ChildNodes) { 
        if (xNode.Attributes[0].Value == KeyName) { 
         xNode.Attributes[1].Value = KeyValue; 
        } 
       } 
      } 
     } 
     XmlDoc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile); 
    } 
} 
+0

¿Hay alguna en C#, por favor? –

+4

Hay clases especiales para trabajar con app.config - no tiene que hacerlo manualmente –

+0

@ Rafał Spacjer - sé que puede ir a las clases especiales que ya están disponibles en .net framwork, pero esta es solo una solución que yo aplicado en mi proyecto –

1

En una nota lateral.

Si algo en su app.config necesita cambiar en el tiempo de ejecución ... es posible que haya un lugar mejor para mantener esa variable.

App.config se utiliza para las constantes. En el peor de los casos, algo con una inicialización única.

+0

Acepto, sin embargo, hay casos en los que una cadena de conexión puede ingresarse de forma incorrecta en texto sin cifrar y desea encriptarla sobre la marcha IMO. –

+0

Si desea seguir usando el administrador de configuración predeterminado pero puede cargar archivos de configuración externos al inicio, es necesario. – Salgat

+0

El tiempo de ejecución al inicio o al final de su aplicación todavía es el tiempo de ejecución. – Neolisk

2

Después de cambiar el valor, probablemente, u será no guardar el documento appconfig.

// update  
    settings[-keyname-].Value = "newkeyvalue"; 
//save the file 
    config.Save(ConfigurationSaveMode.Modified); 
//relaod the section you modified 
    ConfigurationManager.RefreshSection(config.AppSettings.SectionInformation.Name); 
Cuestiones relacionadas