Почему постоянные пользовательские настройки не загружаются? - PullRequest
8 голосов
/ 04 февраля 2010

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

Настройки могут быть изменены во время выполнения и сохраняются таким образом:

Properties.Settings.Default.SelectedCOMPort = options.SelectedCOMPort;
Properties.Settings.Default.Save();

Настройки сохранены правильно, и я подтверждаю это, просматривая файл user.config, сохраненный в каталоге приложения пользователя E.g.

C:\Documents and Settings\e399536\Local Settings\Application Data\MyCompany\MyTool

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

Проверка файла user.config после запуска приложения подтверждает, что настройки все еще сохранены.

Настройки загружаются таким образом:

options.SelectedCOMPort = Properties.Settings.Default.SelectedCOMPort;

Почему используются настройки по умолчанию, а не сохраненные?

Я что-то пропустил?

@ Tenaciouslmpy Настройки загружаются во время конструктора сборки, которая сама загружается в событие загрузки формы основной сборки.

@ Остин Это отдельное приложение, которое я отлаживаю в Visual Studio.

Ответы [ 2 ]

11 голосов
/ 04 февраля 2010

Если вы перекомпилируете приложение между запусками, обратите внимание, что будет считаться, что новая версия приложения и не автоматически загрузит настройки для каждого пользователя. В этой ситуации вам необходимо вызвать Settings.Default.Upgrade.

Один из способов сделать это только при необходимости - добавить параметр NeedsUpgrade (значение True) к настройкам приложения по умолчанию для каждого пользователя. При запуске приложения проверьте, имеет ли значение NeedsUpgrade значение true. Если это так, вызовите Upgrade, установите NeedsUpgrade на False и сохраните настройки. В следующий раз, когда версия приложения изменится, NeedsUpgrade вернется к True, и вы автоматически вызовете Upgrade, чтобы снова ввести любые существующие пользовательские настройки.

Убедитесь, что вы устанавливаете NeedsUpgrade после вызова Upgrade, или он будет уничтожен при обновлении настроек.

if (Settings.Default.NeedsUpgrade)
{
    Settings.Default.Upgrade();
    Settings.Default.NeedsUpgrade = false;
    Settings.Default.Save();
}
2 голосов
/ 04 февраля 2010

Похоже, что вы отлаживаете приложение в Visual Studio, когда каждый раз, когда вы начинаете новый сеанс, вы начинаете с данными по умолчанию.

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

...