Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Несколько пояснений:

Вы должны вызвать метод 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).

Ответ 3

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