Получение настроек из старой версии

У меня есть приложение Winforms, в котором довольно много настроек (файл .settings). Они сохраняются (насколько я могу судить) в C:\Users\[User's username]\AppData\Local\[My program name]\[Build or something]\1.0.0.0\user.config, но всякий раз, когда я создаю новую сборку и пользователь запускает эту версию, он создает новую папку [Build or something] и начинает заново с «новым набором» настроек. Как лучше всего перенести настройки из предыдущей версии?

(Некоторые настройки я хочу быть «совершенно новыми» каждый раз при запуске новой версии, а некоторые настройки я хочу скопировать из последней версии)


person derekantrican    schedule 14.06.2016    source источник
comment
можно ли перенести содержимое настроек в один файл .Config ..?   -  person MethodMan    schedule 15.06.2016


Ответы (1)


Я использую метод, описанный в этом сообщении (в нем написано Clickonce, но он также применим к другим типам приложений): https://blogs.msdn.microsoft.com/rprabhu/2005/06/29/client-settings-faq/

В: Хорошо, но как мне узнать, когда следует вызывать обновление?

A: Хороший вопрос. В Clickonce, когда вы устанавливаете новую версию своего приложения, ApplicationSettingsBase обнаружит ее и автоматически обновит настройки для вас в момент загрузки настроек. В случаях, не связанных с Clickonce, автоматическое обновление отсутствует - вам нужно вызвать обновление самостоятельно. Вот одна из идей, как определить, когда вызывать Upgrade:

Создайте логическую настройку CallUpgrade и присвойте ей значение по умолчанию true. Когда ваше приложение запустится, вы можете сделать что-то вроде:

   if (Properties.Settings.Default.CallUpgrade) {
      Properties.Settings.Default.Upgrade();
      Properties.Settings.Default.CallUpgrade = false;
   }

Это гарантирует, что Upgrade () будет вызываться только при первом запуске приложения после развертывания новой версии.

person vmg    schedule 14.06.2016
comment
Да, в моей программе тоже есть метод checkFirstRun (). Я могу просто положить это туда. Теперь у меня есть пара вопросов: если я позвоню Properties.Settings.Default.Upgrade();, обновятся ли все настройки? Если в новой версии у меня больше настроек, чем в старой, останутся ли они нетронутыми? - person derekantrican; 15.06.2016
comment
В сообщении говорится: просто вызовите ApplicationSettingsBase.Upgrade (), и он получит настройки из предыдущей версии, которые соответствуют текущей версии класса, и сохранит их в файле user.config текущей версии. Так что да, ваши новые настройки останутся нетронутыми - person vmg; 15.06.2016