Currently to make a single configuration setting use by code that differs between environments I have to:
A) Add the setting to a configuration section in the Settings.xml (mark as "MustOverride", but you still have to provide a value).
B) Add a (exactly matching) setting to the configuration override section of the application manifest.
C) Add a application parameter (with a application global name) to the application manifest. This needs a default value that probably matches the one you already provided in the previous step.
D) Add the parameter to every single application parameters file that matches the parameter name. (And don't forget one or it will use the default).
This is crazy and there is nothing to help you manage or keep track of it, forgetting nearly any step of this process will simply result in falling back on defaults, rather than letting you know. You have to repeat everything in multiple xml files.
There are several ways you could fix this but one suggestion:
A) The MustOverride automatically adds the config override.
B) Application parameters are created automatically based on convention (ServiceName_SettingName)
C) Application parameters can not provide a default value, requiring it to be specified in the ApplicationParameters file.
Mike Christensen commented
Another thing that drives me crazy is if a parameter is Encrypted, it _must_ have a value. I cannot make an optional parameter that is also encrypted. Having a value of "" should just bypass the decryption code and pass in a null value.
Ray Min commented
The configuration may go to a service directly, Application abstraction is NOT necessary.