If we have a solution that gets deployed onto a test environment before going live we will have different connection strings for each environment and various other settings that change from one environment to another. In such cases, while deploying our solution to different environments we would have to change our web.config files to match each environment.
Let's suppose we have got the following connection string in our web.config file:
<add name="mainDB" connectionString="con1" providerName=" EntityClient" />
which, during deployment to the test environment changes to this:
<add name="mainDB" connectionString="conb" providerName=" EntityClient" />
To do this, we can maintain multiple web.config files for each environment and manually copy paste them during deployment or create a web.config transformation file which will automatically do it for us, saving us from maintaining multiple web.config files.
To create a web.config transformation file we need to go to Build -> Configuration Manager. Once there we need to open the dropdown labelled "Active solution configuration" and click "< New...>". After this we need to follow the steps to create a new configuration. Once created, you will notice that the Web.config file will have a new file listed under it called web.[environment_name].config (Where environment_name is the name you just specified).
This new file is the web.config transformation file for your specified environment. Once we have created this file all we need to do is write down the differences between the existing and transformed web.config file in a proper syntax and
everything is sorted during deployment. (To learn more about this syntax you can visit
this page.)
As an example we can use the following syntax to transform the connection strings discussed above:
<add name="mainDB" connectionString="conb" providerName=" EntityClient"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)" />
The above line says: look for a web.config key whose
attribute “name” is "mainDB" and set all its attributes to the new value(s) listed. So
the connection string becomes “conb” and the provider name becomes “
EntityClient” (if we had provided a different provider name here, that would
have overridden the existing value).
Once this is all done, we need to test whether the transformation
works fine. One way of doing it is to go through the entire build process and
check the web.config file that comes out of it. Another way of doing this is to
put the existing web.config file and the transformation web.config file onto a
dodgy server and test the output (there are many freeware online tools available to do this).
Alternatively, you can download a visual studio extension
called
Slow Cheetah which will make it as easy as two clicks to see your
transformed file.
This extension adds a new option when you right click on a web.config
transformation file called "Preview Transform" (as shown above).
Once you click "Preview Transform" you are provided with a very easy
interface which shows you both files side by side and that’s it, job done no
need to build/deploy your solution or post your data onto dodgy servers.