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

时间:2011-06-13 20:30:04

标签: c# configuration c#-2.0

我已经在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 section(AleTest.Properties.Settings)名称的固定值,在框架中存在一个变量,假定这个值(AleTest.Properties.Settings) ?

4 个答案:

答案 0 :(得分:5)

您需要拨打ConfigurationManager.RefreshSection以便从磁盘重新读取值。

答案 1 :(得分:5)

我做了一些测试,这是结果。

对于自动生成的课程SettingsConfigurationManager.RefreshSection("applicationSettings");的来电不会对标有ApplicationScopedSettingAttribute的成员应用修改后的值,而是会将更改应用于{{1成员(并不确定ConfigurationManager)。

而是致电UserScopedSettingAttribute

答案 2 :(得分:3)

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

答案 3 :(得分:0)

Aleroot的更新值代码运行良好。 尽管Properties.Settings只是写(没有设置)。

要刷新,这对我有用: ConfigurationManager.RefreshSection( “的applicationSettings”);

但我正在使用它来访问参数: string test = Properties.Settings.Default.MyString; MessageBox.Show(“Paramètres/ Settings MyString =”+ test);

相关问题