I am using VS2010 C#.NET 3.5 and application settings (the Settings.settings file). What I want to do is have different settings for my development and production environmen
we use a NAnt script to build our solution, replace setting values in the config file, run tests and publish.
It's fairly straight forward once you've set it up once or twice.
We never override our web.config file on the production systems. If additional settings/keys are added, we paste them in at the time of publishing.
I think this is the lack of xxx.config files. That's why I use own config manager which can be used with different configurations on each machine where application is installed/executed.
Or you can just create separate config files and call them:
Release.settings
Debug.settings
then setup conditional build events that copy the appropriate .config file to Settings.Settings
if $(ConfigurationName) == Debug xcopy debug.settings settings.settings
if $(ConfigurationName) == Release xcopy release.settings settings.settings
You can conditionally include items in build process, like
<ItemGroup Condition=" '$(Configuration)' == 'Debug' " ...
see https://stackoverflow.com/a/2093289/254109
If you use web deployment projects, you can set it up so that different parts of your web.config will be replaced. You can read more about them here: http://weblogs.asp.net/scottgu/archive/2005/11/06/429723.aspx.
Another approach, that we actually take at my current job is to have multiple web.config files - 1 for each environment (e.g. web.config, web.config.production). Then when we build for deployment, we use msbuild to automatically swap web.config.production in as the web.config.