Wednesday, August 11, 2010

C# Version Numer Tip

Have you ever tried to store data in the application properties in C#? It has some really slick abilities to store settings for you. I use it for window sizes and things like that. All you do is add data to your settings (usually found in Properties/Settings.settings in your project), then reference them. You start off by getting your application set up to use settings with this "using" statement:
using System.Configuration;

You read and write them like this:

internalValue = Properties.Settings.Default.MyNamedSetting;
// modify your internal value.

Properties.Settings.Default.MyNamedSetting = internalValue;

The tricky part is that every time you update your application version number, these settings are left behind and it creates a new set for you. How do you get around such a problem? By using a couple of the more obscure features of Properties.Settings.Default.

First, you need a way to detect when it's a new version. You can do that by creating a boolean settings entry named something like FirstRun with a default value of true. You can tell if it's your very first time to run the application at a particular version number because it will have the default value of true. Then you can set the value of FirstRun to false. By using the special built-in Upgrade() function, and saving the results, you can import your previous data just like this:

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

There. Now you have a system that automatically detects version bumps, and saves all your special settings from one version to the next.

No comments: