Republished with Permission - Original Article
One of the questions I get asked fairly
regularly is: "how can I can easily change different configuration
settings in my web.config file based on whether my application is in a dev, qa,
staging or production mode?" The most common scenario for this is
one where an application uses different database connection-strings for testing
and production purposes.
It turns out you can easily automate this
configuration process within the Visual Studio build environment (and do so in
a way that works both within the IDE, as well as with
command-line/automated builds). Below are the high-level steps you
take to do this. They work with both VS 2005 and VS 2008.
Use ASP.NET Web Application Projects (which
have MSBuild based project files)
Open the VS Configuration Manager and
create new "Dev", "QA", "Staging" build
configurations for your project and solution
Add new "web.config.dev",
"web.config.qa", and "web.config.staging" files in your
project and customize them to contain the app's mode specific configuration
Add a new "pre-build event" command
to your project file that can automatically copy over the web.config file
in your project with the appropriate mode specific version each time you
build the project (for example: if your solution was in the
"Dev" configuration, it would copy the web.config.dev settings to the
main web.config file).
Once you follow these steps, you can then just
pick the mode your solution is in using the configuration drop-down in the VS
The next time you build/run after changing the configuration
mode, VS will automatically modify your application's web.config file to
pick up and use the web.config settings specific to that
build configuration (so if you select QA it will use the QA settings, if
you select Deploy it will use the Deploy settings).
The benefit with this approach is that it works well in a
source control environment (everyone can sync and build locally without having
to make any manual changes on their local machines). It also works on a
build server - including with scenarios where you are doing automated
command-line solution builds.