2010-03-19 2 views
28

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

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

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

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

+0

[Сохранение настроек между обновлениями] (https://stackoverflow.com/questions/534261/how-do-you-keep-user-config-settings-across-different-assembly-versions-in-net/534335# 534335) может быть еще одной проблемой при использовании класса .Net Settings. Ответ на этот вопрос в начале этого сообщения. –

+0

Я разместил возможное решение в [этой теме] (https://stackoverflow.com/a/47921377/3223783). Надеюсь, это поможет! – dontbyteme

+0

Я опубликовал возможное решение в следующем потоке: https://stackoverflow.com/a/47921377/3223783 Надеюсь, что это поможет! – dontbyteme

ответ

18

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

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

+0

Спасибо за информацию! Он теперь собран, протестирован, работает как ожидалось и теперь полностью интегрирован в проект! Я буду награждать вас щедростью, когда смогу (видимо, я должен ждать, чтобы принять этот ответ - должен быть позже сегодня или завтра). : D – InvertedAcceleration

1

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

+0

Спасибо за то, что вы начинали в своем опыте ... Я взорван. У меня нет ответа прямо сейчас, что прямо и просто (как через SO, так и я пытаюсь ответить на это сам в документах). Это заставляет меня думать, что это невозможно ...что является безумным для того, что кажется великолепной функцией экономии времени, которая будет практически полностью бесполезной для подавляющего большинства проектов. – InvertedAcceleration

41

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

Вы должны вызвать 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 до версии change - когда свойство возвращает значение по умолчанию true).

+2

Вместо/в дополнение к 'UpgradeRequired', я бы сохранил версию приложения в качестве параметра. Это позволяет вам выполнять персонализированные конверсии обновления (т. Е. Недопустимого значения/действительного значения, отличного от последнего значения по умолчанию/-значения последней версии). У вас может быть код, который преобразует каждую применимую версию, нуждающуюся в преобразовании, в следующую самую низкую версию, которая требует ее и соединяет код вместе, тем самым: а) уменьшая сложность кода преобразования последней версии и б) позволяя потенциально удалять старый код преобразования. – Tom

 Смежные вопросы

  • Нет связанных вопросов^_^