Update AppSettings and custom configuration sections in App.config at runtime
This post shows how to update (add, edit or remove) AppSettings
and custom config sections in App.config
at runtime.
- App.config file
- Update AppSettings
- Update custom configuration sections
- Print out all keys
- References
App.config file
Sample App.config
file:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="geoSettings">
<section name="summary" type="System.Configuration.NameValueSectionHandler" />
</sectionGroup>
</configSections>
<appSettings>
<add key="Language" value="Ruby" />
<add key="Version" value="1.9.3" />
</appSettings>
<geoSettings>
<summary>
<add key="Country" value="New Zealand" />
<add key="City" value="Christchurch" />
</summary>
</geoSettings>
</configuration>
Update AppSettings
Add a new key
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings.Add("OS", "Linux");
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
Edit an existing key's value
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings["Version"].Value = "2.0.0";
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
Delete an existing key
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings.Remove("Version");
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
Update custom configuration sections
Add a new key
var xmlDoc = new XmlDocument();
xmlDoc.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
// create new node <add key="Region" value="Canterbury" />
var nodeRegion = xmlDoc.CreateElement("add");
nodeRegion.SetAttribute("key", "Region");
nodeRegion.SetAttribute("value", "Canterbury");
xmlDoc.SelectSingleNode("//geoSettings/summary").AppendChild(nodeRegion);
xmlDoc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
ConfigurationManager.RefreshSection("geoSettings/summary");
Edit an existing key's value
var xmlDoc = new XmlDocument();
xmlDoc.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
xmlDoc.SelectSingleNode("//geoSettings/summary/add[@key='Country']").Attributes["value"].Value = "Old Zeeland";
xmlDoc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
ConfigurationManager.RefreshSection("geoSettings/summary");
Delete an existing key
var xmlDoc = new XmlDocument();
xmlDoc.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
XmlNode nodeCity = xmlDoc.SelectSingleNode("//geoSettings/summary/add[@key='City']");
nodeCity.ParentNode.RemoveChild(nodeCity);
xmlDoc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
ConfigurationManager.RefreshSection("geoSettings/summary");
Print out all keys
var appSettings = ConfigurationManager.AppSettings;
var customSettings = ConfigurationManager.GetSection("geoSettings/summary") as NameValueCollection;
foreach (string key in appSettings.AllKeys) {
Console.WriteLine("{0}: {1}", key, appSettings[key]);
}
foreach (string key in customSettings.AllKeys) {
Console.WriteLine("{0}: {1}", key, customSettings[key]);
}