Ответ 1
Маркус Олссон уже дал довольно хороший ответ здесь.
По существу вам нужно будет использовать метод ApplicationSettingsBase.Upgrade().
Я создал приложение, которое использует settings.settings для хранения определенных пользовательских настроек (scope = User). Настройки загружаются правильно при запуске, изменяются во время использования и сохраняются правильно для следующего запуска. Этот цикл не имеет проблем.
Проблема возникает, когда я обновляю сборки и версии файлов для новой сборки. Установки больше не загружаются при запуске (вместо этого используются значения по умолчанию). Также представляется, что файл конфигурации, сохраненный с версии 1.1, будет сохраняться, даже если будет запущена версия 1.2, и сгенерирован и сохранен новый файл конфигурации (например, вы можете перезапустить версию 1.1, а файл конфигурации будет конфигурационным файлом, который был сохранен из этого версия).
Итак, похоже, что настройки относятся к версии сборки и/или файла. Также стоит отметить, что между версией 1.1 и версией 1.2 не было никаких изменений в файле settings.settings или что-то еще в этом отношении (т.е. Единственное изменение, которое я сделал между этими разными сборками, - это изменение номеров версий).
Есть ли способ сохранить эти настройки при изменении версии?
Маркус Олссон уже дал довольно хороший ответ здесь.
По существу вам нужно будет использовать метод 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.