在运行时保存并重新加载app.config(applicationSettings)

本文关键字:运行时 app config applicationSettings 加载 新加载 保存 | 更新日期: 2023-09-27 17:59:14

我已经将应用程序的配置存储在app.config中,通过Visual Studio,我在项目属性对话框的设置选项卡上创建了一些应用程序密钥,然后在应用程序级别(而不是用户级别)设置了该密钥。

Visual Studio自动生成以下xml文件(app.config):

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="AleTest.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <applicationSettings>
        <AleTest.Properties.Settings>
            <setting name="DatabasePath" serializeAs="String">
                <value>Test.s3db</value>
            </setting>
            <setting name="DatabaseUser" serializeAs="String">
                <value />
            </setting>
            <setting name="DatabasePass" serializeAs="String">
                <value />
            </setting>
        </AleTest.Properties.Settings>
    </applicationSettings>
</configuration>

现在我想在运行时保存并重新加载设置,下面是我的代码,它允许在配置文件中保存值DatabasePath

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConfigurationSectionGroup applicationSectionGroup = config.GetSectionGroup("applicationSettings");
ConfigurationSection applicationConfigSection = applicationSectionGroup.Sections["AleTest.Properties.Settings"];
ClientSettingsSection clientSection = (ClientSettingsSection)applicationConfigSection;
//Database Configuration Setting
SettingElement applicationSetting = clientSection.Settings.Get("DatabasePath");
applicationSetting.Value.ValueXml.InnerXml = this.textBoxPath.Text.Trim();
applicationConfigSection.SectionInformation.ForceSave = true;
config.Save();

问题是,在我重新启动应用程序之前,应用程序不会加载此代码的新设置;有没有办法在运行时重新加载配置设置?

我还想用一个变量值替换applicationSettings部分名称的固定值(AleTest.Properties.Settings),在框架中存在一个变量,假设这个值(AleTest.Properties.Settings)?

在运行时保存并重新加载app.config(applicationSettings)

您需要调用ConfigurationManager.RefreshSection才能从磁盘中重新读取值。

我做了一些测试,结果如下。

对于自动生成的类SettingsConfigurationManager.RefreshSection("applicationSettings");的调用不会将修改后的值应用于标记为ApplicationScopedSettingAttribute的成员,而是通过ConfigurationManager成员将更改应用于未来的调用(不确定UserScopedSettingAttribute)。

而是调用Settings.Default.Reload();

您想要的是通过创建一个自定义ConfigSection来实现,该自定义ConfigSection允许您进行更多控制并允许您更改名称。配置管理器有一个刷新部分,允许您重新加载数据。

Alertoot用于更新值的代码运行良好。尽管属性.设置是只读的(没有设置)。

为了刷新,这对我很有效:ConfigurationManager.RefreshSection("applicationSettings");

但我用这个来访问参数:字符串测试=属性.Settings.Default.MyString;MessageBox.Show("参数/设置MyString="+test);