2016-06-14 7 views
0

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

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

+0

может ли содержимое настроек переноситься в один файл .Config ..? – MethodMan

ответ

3

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

Q: Хорошо, но откуда я узнаю, когда позвонить в Upgrade?

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

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

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

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

+0

Да, у меня также есть метод checkFirstRun() в моей программе. Я могу просто положить его туда. Теперь у меня есть пара вопросов: если я назову 'Properties.Settings.Default.Upgrade();' он обновит все настройки? Если у меня больше настроек в новой версии, чем в старой версии, останутся ли они нетронутыми? – derekantrican

+0

сообщение говорит: «Просто вызовите ApplicationSettingsBase.Upgrade(), и он будет извлекать настройки из предыдущей версии, которые соответствуют текущей версии класса, и хранить их в файле user.config текущей версии.» Итак, да, ваши новые настройки останутся нетронутыми – vmg