C#使用ConfigurationManager类动态修改配置文件
参考文档:
https://msdn.microsoft.com/zh-cn/library/system.configuration.configurationmanager.refreshsection(v=VS.100).aspx
在程序运行时动态的修改app.config文件,用ConfigurationManager在app.config中写入新的值,重启程序即能生效。
如配置文件如下:
<configuration>
<appSettings>
<add key="name" value="oldvalue"/>
</appSettings>
</configuration>
修改配置文件的代码如下:
private static void ChangeConfiguration()
{
//读取程序集的配置文件
string assemblyConfigFile = Assembly.GetEntryAssembly().Location;
Configuration config = ConfigurationManager.OpenExeConfiguration(assemblyConfigFile);
//获取appSettings节点
AppSettingsSection appSettings = (AppSettingsSection)config.GetSection("appSettings");
//删除name,然后添加新值
appSettings.Settings.Remove("name");
appSettings.Settings.Add("name", "newValue");
//保存配置文件
config.Save();
}
注意:vs调试的时候运行的是xxx.vshost.exe,使用是配置文件是xxx.vshost.exe.config。但是ConfigurationManager.OpenExeConfiguration打开的是xxx.exe.config。所以在vs调试情况下修改并调用ConfigurationManager.RefreshSection("appSettings");后并不能重新读取到新的值。对于这种情况,可以使用以下方式获取配置文件对象:
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);