Как сохранить изменения в файле.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 по умолчанию.