在程序运行时候,我们有时候需要修改配置文件。通过查阅网上资料,通常的做法有两种,一种就是将app.config视为一个xml文本去处理,这方面我就不去说了,另一个方法就是通过自带的类库去修改,这个网上也有资料,我就不多说。
我这里要说的是,在使用Configuration 类去修改时候,获取文件的方式不同,会产生不同的结果,这么说可能不太容易理解,我通过举一个例子,方便大家理解:
一:通过编译时修改
Configuration config = ConfigurationManager.OpenExeConfiguration(Assembly.GetEntryAssembly ().Location);
这个实例化是通过获取文件的路径来修改配置文件,所以在修改以后,是无法获取到文件修改信息的。只有在下次启动程序的时候,才能够获取到修改后的信息。
二:通过运行时修改
Configuration config1 = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
这个实例化能够修改配置文件,并且实时的获取到修改后的信息。不过在下次启动程序的时候,却还是按照原来的配置文件的信息去运行。
所以这两个方法各有利弊,如果需要修改,并且实时的去获取,以及下次运行仍旧保存修改后的信息的,那就将这两个方法同时去使用,能够的到效果。
代码如下:
Configuration config = ConfigurationManager.OpenExeConfiguration(Assembly.GetEntryAssembly ().Location);
config.AppSettings.Settings.Remove(key);
config.AppSettings.Settings.Add(key, value);
config.Save();
Configuration config1 = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config1.AppSettings.Settings[key].Value = value;
config1.Save();
ConfigurationManager.RefreshSection("appSettings");
以上是我解决这个问题的方法, 希望有更好的方法的话,在评论里告诉我,同时也让困扰于此问题的同仁,有一个解决方案。不喜勿喷!