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

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

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

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

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

3 ответа

Решение

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

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

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

Вы должны позвонить 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();
  }

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

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

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