C#使用ConfigurationManager类动态修改配置文件

作者:陆金龙    发表时间:2015-08-08 20:24   


参考文档:

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);