0

在我的应用程序中,我需要在运行时更改 app.config 的 appSetting 中的一些值(“环境”)。

我使用 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 知道值已更改为使用它的相同实例,但具有刷新的值?

(显然不是一个破坏项目的问题,更像是一个教育问题)

4

3 回答 3

1

AppSettingsReader 似乎没有任何从磁盘重新加载的方法。它只是派生自对象。创建一个新实例似乎是唯一可行的方法......我可能错了,但 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 属性公开了一个同步的单例实例。这应该意味着您不需要重新加载。您将始终获得应用程序中的最新值。

于 2009-01-16T06:14:27.317 回答
0
System.Configuration.ApplicationSettingsBase.Reload
于 2009-01-16T01:43:16.303 回答
0

升级是您正在寻找的功能

System.Configuration.ApplicationSettingsBase.Upgrade
于 2009-02-26T14:34:40.233 回答