在我的应用程序中,我需要在运行时app.config appSetting中更改一些值(“Environment”)。
我使用AppSettingsReader
private static AppSettingsReader _settingReader;
public static AppSettingsReader SettingReader
{
get
{
if (_settingReader == null)
{
_settingReader = new AppSettingsReader();
}
return _settingReader;
}
}
然后在某个阶段我这样做
config.AppSettings.Settings[AppSettingString.Environment.ToString()].Value = newEnvironment.ToString();
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
然而,下次我尝试读这样的“环境”
string environment = (string)SettingReader.GetValue(AppSettingString.Environment.ToString(), typeof(System.String));
我最终得到了环境的旧价值。
我注意到我可以通过
解决这个问题_settingReader = new AppSettingsReader();
在我读“环境”之前。
但我认为创建一个新实例并不是正确的方法。
也许有办法让我的SettingReader知道,值已经改变为使用相同的实例,但是刷新了值?
(显然不是一个破坏项目的问题,更像是一个教育问题)
答案 0 :(得分:1)
AppSettingsReader似乎没有任何方法可以从磁盘重新加载。它只是派生自Object。创建一个新实例似乎是唯一可行的...我可能错了,但AppSettings应该是您应用的只读值。更像是应用程序的配置参数,可以在启动之前进行调整。
对于读写应用程序设置,我认为IDE支持的设置机制(System.Configuration.ApplicationSettingsBase)将是首选方法。这有Save和Reload方法。 designer-gen类使代码更具可读性。
双击解决方案资源管理器中项目下的“属性”节点。找到“设置”选项卡。
而不是
sEnvironment = (string)SettingReader.GetValue(AppSettingString.Environment.ToString(), typeof(System.String));
你可以输入类似
的属性sEnvironment = Properties.Settings.Default.Environment;
设计器生成的类通过Default属性公开同步的单例实例..这意味着你不需要重新加载..你总是在应用程序中获得最新的值。
答案 1 :(得分:0)
System.Configuration.ApplicationSettingsBase.Reload
答案 2 :(得分:0)
升级是您正在寻找的功能
System.Configuration.ApplicationSettingsBase.Upgrade