Постоянные настройки пользователя

Я пытаюсь сохранить пользовательские настройки в C# и использовать их в следующем сеансе.

По всей сети можно найти следующие подсказки: Как программно сохранить пользовательские настройки?

у меня есть .setting файл в моем проекте с настройками по умолчанию.

Когда пользователь меняет настройки, я звоню save, И в %APPDATA% появится файл с пользовательскими настройками. Это выглядит так:

private void SetSetting(string prop, Object val)
{
    try
    {
        string strval = String.Format("G{0}_{1}", Group_Id, prop);
        Properties.Last.Default[strval] = val;
    }
    catch
    {
        System.Configuration.SettingsProperty property = new System.Configuration.SettingsProperty(String.Format("G{0}_{1}", Group_Id, prop));
        property.PropertyType = Properties.Def.Default[String.Format("G0_{1}", Group_Id, prop)].GetType();
        property.DefaultValue = Properties.Def.Default[String.Format("G0_{1}", Group_Id, prop)];
        property.PropertyType = val.GetType();
        property.Provider = Properties.Last.Default.Providers["LocalFileSettingsProvider"];
        property.Attributes.Add(typeof(System.Configuration.UserScopedSettingAttribute), new System.Configuration.UserScopedSettingAttribute());
        Properties.Last.Default.Properties.Add(property);
        Properties.Last.Default.Reload();
        string strval = String.Format("G{0}_{1}", Group_Id, prop);
        Properties.Last.Default[strval] = val;
    }
    Properties.Last.Default.Save();
}

Как видите, у меня есть экземпляр настроек Last как в "настройках из последней сессии" и Def как по умолчанию.

По сути, пользователь может добавлять и удалять группы по своему усмотрению в приложении. Def содержит конфигурацию по умолчанию для новой группы. Last должно содержать количество групп в последнем сеансе пользователя, а также свойства каждой группы. Таким образом, форматирование с Group_Id и так далее.

Итак, как я уже сказал. Во время выполнения это нормально. Пользовательские настройки правильно записаны в файл в %APPDATA% и все.

Файл выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c5629387e089" >
            <section name="Project1.Properties.Last" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c5629387e089" " allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <userSettings>
        <Project1.Properties.Last>
            <setting name="G1_do_cut" serializeAs="String">
                <value>True</value>
            </setting>
        </Project1.Properties.Last>
    </userSettings>
</configuration>

Итак, настройка для do_cut для группы 1 сохраняется как G1_do_cut

Но как только я перезагружаю приложение, пользовательские настройки игнорируются. Используемый код:

private Object GetSetting(string prop)
{
    try { return Properties.Last.Default[String.Format("G{0}_{1}", Group_Id, prop)]; }
    catch { return Properties.Def.Default[String.Format("G0_{1}", Group_Id, prop)]; }
}

и в попытке, исключение G1_do_cut is not found in settings брошен и улов загружает по умолчанию.

Во время сеанса пользователя GetSettings работает правильно - если я пытаюсь читать G1_do_cut после того, как это было установлено, никакое исключение не выдается, и я получаю правильное значение.

Как заставить C# повторно использовать настройки после перезапуска приложения?

0 ответов

Другие вопросы по тегам