I have an application that uses a custom configuration section for user-level settings. It's done this way instead of using Settings files so that the settings can be centralized in a single app.config for the program, instead of having one per project as is the default for settings files.
The problem is that these custom settings are configurable per-user, and are lost when the user upgrades the software (a new folder for the new build version is created, and the old folder is no longer used). So, I need a way to migrate these settings either on update, or on the first run of the application per user after the upgrade. I've seen the info on Settings.Upgrade(), but that only works specifically on the Settings file section of the config. I've looked through documentation for ConfigurationSection (from which my custom settings class/section derives) and there doesn't seem to be anything helpful. Using ConfigurationManager to pull in the user settings from the installer to migrate them seems to be a dead-end, as the overloads of OpenExeConfiguration don't support specifying both the executable and the user level.
Any hints? The information stored is not critical (remembered window geometry and layout settings, mostly) but can be annoying to lose every time the app is upgraded. The only thing I can think of is to forego the config mechanism for these settings altogether, and implement my own model for storing these settings in version-agnostic files in the user's AppData (where I store a few other user-specific files). I would prefer that to be the last option, as you lose a lot by giving up the app.config wrappers.