Managing configuration settings for different environments with config transformations

When you create a new web application in Visual Studio 2010, you will by default get a configuration file like this:

Web.config transformations

The web.config transformations allow you to adapt your configuration settings for different builds or environments. We have all worked with development, test and production environments where our settings differ from each other like:

  • Database connection strings
  • Endpoints
  • Credentials
  • Domains
  • Application settings
  • Debug mode
  • Tracing
  • Folders or shares
  • ….

When working with different environments, you are bound to be working with different configuration settings. Web transformations allows us to transform our configuration file to the correct configuration file for the environment we want to publish to. By default we get a Debug and Release transformation file. We want to add a tranformation file for developent, test and production environment.

1. How to use web.config transformations to manage your different configurations

For demo purposes we will take a simple web.config file which looks like the following:

Using web.config transformations to manage configuration for different environments

This is the web.config file which is containing our development settings. We will start by changing our configurations by the Configuration Manager:

Using web.config transformations to manage configuration for different environments

You can edit the current configurations (Debug and Release) and you can create new Configurations:

Using web.config transformations to manage configuration for different environments

I changed my configurations to Test and Production:

Using web.config transformations to manage configuration for different environments

Make sure your projects are linked to the correct configuration:

Using web.config transformations to manage configuration for different environments

Update the web.config transformations by using the Add Config Transforms on the Web.config file. This option will only be available if there is a missing transformation file for one of the possible configurations.

Using web.config transformations to manage configuration for different environments

The web.config transformation files will be updated now to match our current configurations:

Using web.config transformations to manage configuration for different environments

If we have a look at one of these transformations files, it will look like this by default template:

Using web.config transformations to manage configuration for different environments

Let’s change our Web.Production.config transformation file to something like this:

Using web.config transformations to manage configuration for different environments

Basically we specify we are going to change the connection string with name “DefaultConnection” to the correct connection string for Production. The xdt:Transform and xdt:Locator attributes are used to specify what to transform and how to transform it. For our appSettings we specify the BackOfficeEmail setting should have it’s value changed to production@microsoft.com, which is the value for the production environment. We also specify that we want to insert a new application setting.

Set the configuration to Production and build your project:

Using web.config transformations to manage configuration for different environments

When we publish our web application:

Using web.config transformations to manage configuration for different environments

We publish it to our file system:

Using web.config transformations to manage configuration for different environments

The published web.config looks as following:

Using web.config transformations to manage configuration for different environments
Another way to look up your transformed configuration file is to show the hidden files in your solution explorer and find the builds in the obj folder:

Using web.config transformations to manage configuration for different environments

The web.config has the correct connection string and app settings for Production. If we decide to build our solution on the Test configuration, our web.config will contain the transformations we specified in our Test transformation file.

In this case I worked as following:

  • Web.config: Contained the configuration settings for my development
  • Web.Development.config: Contained an empty transformation file since my development configurations were specified in the default web.config
  • Web.Test.config: Contained the transformations for the test environment
  • Web.Production.config: Contained the transformations for the production environment

Another way to work could be:

  • Web.config: Contains the configuration settings that are equal for all environments
  • Web.Development.config: Inserts all configuration settings for development environment
  • Web.Test.config:  Inserts all configuration settings for test environment
  • Web.Production.config:  Inserts all configuration settings for production environment

However it’s all up to preference and what suits you best.

2. Locator and Transform attributes to manage different transformations

The Transform and Locator attribute allows a few different options which you can use to manage different transformations. The Locator attribute is used to define what element the transformation should be applied to. The Transform attribute is used to specify what you want to do with the element in the transformation.

The Locator attribute allows the following options:

  • Match
  • Condition
  • XPath

The Transform attribute allows the following options:

  • Replace
  • Insert
  • InsertBefore
  • InsertAfter
  • Remove
  • RemoveAll
  • RemoveAttributes
  • SetAttributes

Examples on the Locator and Transform option: msdn

Web.config transformations are an easy tool to adjust our configuration settings according to the configuration we want to build to without much hassle. You define the configurations and for each configuration your specify your configuration transformation file. When you need a specific build or publish, you specify what configuration you want it to be on and you will immediately have to configuration file with the specified settings for the chosen environment.

Cheers,
Robbin

About these ads