Проблема с .NET Settings.Reload () и Settings.Save () Настройки не загружаются - PullRequest
3 голосов
/ 11 марта 2010

У меня странная проблема, которую я не могу понять. У меня есть класс пользовательских настроек, который наследует ApplicationSettingsBase. Он имеет пользовательские настройки, как показано ниже.

    /// <summary>
    /// The Last Active Account
    /// </summary>
    [UserScopedSettingAttribute()]
    public AccountKeyClass ActiveAccount
    {
        get
        {
            try
            {
                return (AccountKeyClass)this["ActiveAccount"];
            }
            catch(Exception error){}
            return null;
        }
        set
        {
            this["ActiveAccount"] = value;
            if (!this.AccountList.Contains(value))
            {
                //this.AccountList.Add(value);
            }
        }
    }

    /// <summary>
    /// Account List
    /// Key: UserID
    /// Value: AccountKeyClass
    /// </summary>
    [UserScopedSettingAttribute()]
    public List<AccountKeyClass> AccountList
    {
        get
        {
            try
            {
                if(this["AccountList"] != null)
                    return (List<AccountKeyClass>)this["AccountList"]; 
            }
            catch(Exception error){}
            return null;
        }
        set { this["AccountList"] = value; }
    }

У меня есть две формы: Основная форма и Форма настроек, в которой можно изменить настройки приложения. Когда я создаю SettingsForm и меняю значение AccountList Settings, файл user.config изменяется в соответствии с ожиданиями. Моя кнопка «Применить / Ок» для моей SettingsForm вызывает Settings.Save (), затем Settings.Reload (), затем закрывает форму. Проблема в том, что когда вызывается .Reload (), Settings.AccountList становится нулевым.

Более того, файл user.config никогда не меняется, если я закрываю приложение и открываю заново, файл user.config по-прежнему правильный, но файл Settings.AccountList никогда не читается.

Параметр Settings.AccountList считывается, если я никогда не вызываю .Reload ().

Обновление: Если я создам Список и Сохранить (); из моей MainForm, то AccountList будет читаться из моего user.config нормально. Однако, если я добавлю в AccountList свою вторичную форму (SettingsForm) и вызову Save (), то при следующем запуске приложения настройки не будут считаны, и вместо него будет возвращено нулевое значение. Это происходит, даже если я не использую Reload ().

Я думаю, что проблема связана с использованием универсального списка <>. Сохраняемый AccountKeyClass сохраняется в виде сериализованного XML.

Ответы [ 2 ]

1 голос
/ 26 марта 2010

уточните, если вы меняете свойство AccountList или меняете его содержимое?

Если вы добавляете или удаляете элемент в / из списка <> - Settings.Save () не сохраняет его, потому что не может видеть, что свойство было изменено.

Попробуйте что-то вроде этого:

var temp = settings.AccountList;
settings.AccountList = null;
settings.AccountList = temp;
settings.Save();
1 голос
/ 11 марта 2010

Я помню похожую проблему с .Reload ().Просто для удовольствия ... Попробуйте запустить его в выпуске, или что-то еще, что не является режимом отладки в вашей настройке (если вы еще этого не сделали).

...