Dans mon app.config j'ai cette section
<appSettings>
<add key ="UserId" value ="myUserId"/>
// several other <add key>s
</appSettings>
Habituellement, j'accède aux valeurs à l'aide de userId = ConfigurationManager.AppSettings["UserId"]
Si je le modifie en utilisant ConfigurationManager.AppSettings["UserId"]=something
, la valeur n'est pas enregistrée dans le fichier et la prochaine fois que je charge l'application, elle utilise l'ancienne valeur.
Comment puis-je changer la valeur de certaines clés app.config pendant l'exécution?
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings["UserId"].Value = "myUserId";
config.Save(ConfigurationSaveMode.Modified);
Vous pouvez lire sur ConfigurationManager ici
Sur une note latérale.
Si quelque chose dans votre app.config doit changer au moment de l'exécution ... il est possible qu'il y ait un meilleur endroit pour conserver cette variable.
App.config est utilisé pour les constantes. Au pire, quelque chose avec une initialisation unique.
Après avoir modifié la valeur, u n'enregistrera probablement pas le document Appconfig.
// update
settings[-keyname-].Value = "newkeyvalue";
//save the file
config.Save(ConfigurationSaveMode.Modified);
//relaod the section you modified
ConfigurationManager.RefreshSection(config.AppSettings.SectionInformation.Name);
Modification du fichier app.config
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);
}
}