Сохраните и перезагрузите app.config (applicationSettings) во время выполнения - PullRequest
8 голосов
/ 14 июня 2011

Я сохранил конфигурацию своего приложения в 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)?

Ответы [ 4 ]

5 голосов
/ 25 августа 2015

Я сделал несколько тестов и вот результат.

Для автоматически сгенерированного класса Settings вызов ConfigurationManager.RefreshSection("applicationSettings"); не применяет измененные значения для членов, отмеченных ApplicationScopedSettingAttribute, он применяет изменения к будущим вызовам через ConfigurationManager участников (и не уверен насчет UserScopedSettingAttribute).

Вместо звоните Settings.Default.Reload();

5 голосов
/ 14 июня 2011

Вам необходимо вызвать ConfigurationManager.RefreshSection , чтобы значения были перечитаны с диска.

3 голосов
/ 14 июня 2011

То, что вы хотите, может быть достигнуто путем создания пользовательского ConfigSection , который дает вам больше контроля и позволяет изменять имя.Диспетчер конфигурации имеет раздел обновления, который позволит вам перезагрузить данные.

0 голосов
/ 11 июля 2014

Код Aleroot для обновления значений работал нормально. Несмотря на то, что Properties.Settings только для записи (не задано).

Чтобы обновить, это сработало для меня: ConfigurationManager.RefreshSection ( "applicationSettings");

Но я использую это для доступа к параметру: string test = Properties.Settings.Default.MyString; MessageBox.Show («Параметры / Настройки MyString =» + test);

...