Как сохранить изменения в файле .settings / .config при изменении версии файла? - PullRequest
41 голосов
/ 19 марта 2010

Я создал приложение, которое использует settings.settings для хранения некоторых пользовательских настроек (scope = User). Настройки загружаются правильно при запуске, изменяются во время использования и сохраняются правильно для следующего запуска. Похоже, у этого цикла нет проблем.

Проблема возникает, когда я обновляю версию сборки и файла для новой сборки. Настройки больше не загружаются при запуске (вместо этого используются значения по умолчанию). Также представляется, что файл конфигурации, сохраненный из версии 1.1, будет сохраняться даже в том случае, если будет запущена версия 1.2, а также будет создан и сохранен НОВЫЙ файл конфигурации (т. Е. Вы можете перезапустить версию 1.1, и файл конфигурации будет файлом конфигурации, который был сохранен из этого файла). версия).

Таким образом, похоже, что настройки зависят от версии сборки и / или файла. Также стоит отметить, что между версией 1.1 и версией 1.2 не было никаких изменений в файле settings.settings или чем-либо еще в этом отношении (т.е. единственное изменение, которое я сделал между этими различными сборками, было изменение номеров версий).

Есть ли способ сохранить эти настройки при изменении версии?

Ответы [ 3 ]

59 голосов
/ 23 апреля 2010

Несколько уточнений:

Вы должны вызвать метод Upgrade производного класса ApplicationSettingsBase (который обычно называется Settings и создается для вас Visual Studio):

Properties.Settings.Default.Upgrade();

Когда / где вызывать метод Upgrade? Существует простой прием, который вы можете применить: определите пользовательскую настройку с именем UpgradeRequired (пример) как bool (самый простой способ - через IDE). Убедитесь, что его значение по умолчанию true.

Вставьте этот код, отсекаемый при запуске приложения:

  if (Properties.Settings.Default.UpgradeRequired)
  {
      Properties.Settings.Default.Upgrade();
      Properties.Settings.Default.UpgradeRequired = false;
      Properties.Settings.Default.Save();
  }

Таким образом, метод обновления будет вызываться только после изменения версии и только один раз (поскольку вы отключаете дальнейшие обновления, устанавливая UpgradeRequired = false до изменения версии - когда свойство восстанавливает значение по умолчанию true).

24 голосов
/ 23 марта 2010

Маркус Олссон уже дал довольно хороший ответ здесь .

По сути вам нужно будет использовать метод ApplicationSettingsBase.Upgrade () .

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

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

...