I have created an application that uses settings.settings to store some user specific settings (scope=User). Settings are loaded correctly on startup, changed during use and saved correctly for next launch. This cycle appears to have no problems.
The problem arises when I update the assembly and file versions for a new build. The settings are no longer loaded on startup (instead the default values are used). It also appears that a config file saved from version 1.1 will persist even if version 1.2 is launched and a NEW config file is generated and saved too (i.e. you can relaunch version 1.1 and the config file will be the config file that was saved from that version).
So it appears that the settings are specific to the version of the assembly and/or file. It is also worth noting that between version 1.1 and version 1.2 there were no changes to the settings.settings file or anything else for that matter (i.e. the only change I made between these different builds was modifying the version numbers).
Is there a way to persist these settings across version changes?
A few clarifications:
You have to call the Upgrade
method of ApplicationSettingsBase
derived class (that is normally called Settings
and is created for you by Visual Studio):
Properties.Settings.Default.Upgrade();
When/where to call the Upgrade
method? There is a simple trick you can apply: define a user setting called UpgradeRequired
(example) as bool
(the easiest way is through IDE). Make sure its default value is true
.
Insert this code snipped at the start of the application:
if (Properties.Settings.Default.UpgradeRequired)
{
Properties.Settings.Default.Upgrade();
Properties.Settings.Default.UpgradeRequired = false;
Properties.Settings.Default.Save();
}
So the Upgrade method will be called only after the version changes and only one time (since you disable further upgrades by setting UpgradeRequired = false
until a version change - when the property regains default value of true
).