This isn't something I came up with - I'm not taking credit for it. I just found it on the net a long time ago and a colleague asked me about it so I thought I'd put it here for future reference.
With VS2005/.net 2 you get the ever so useful my.settings stuff. This is fine except it's version specific. When you release a new version of your app it creates a whole new settings file, ignoring the previous one for the old version.
To overcome this put in a new boolean setting, I call mine CallUpgrade, and set it's default value to True.
Then in your form load/get settings sub do the following;
If My.Settings.CallUpgrade Then
My.Settings.Upgrade()
My.Settings.CallUpgrade = False
End If
Now every time your app load it will look at your current CallUpgrade value, if it's the first time that version's been run it will be true and so the specific My.Settings Upgrade method will run which looks for a previous version and ports the setting values across. Then setting the CallUpgrade flag to false for future loads to not waste time trying to upgrade the settings.
Simple, a little cludgy on Microsoft's part not to have a more clear solution to it but this does the job.