ASP.NET Web.config transformations are a great way to manage configuration differences between environments. You can easily change a database connection string or change the compilation model for ASP.NET. Here is a link to the syntax documentation on MSDN. The problem with web.config transformations is that it has been historically really hard to run the transforms. The tooling to do this was buried into Visual Studio. The ASP.NET team just released a library to run the transformations as a nuget library.
Using that library, I created a very simple command line tool to transform config files WebConfigTransformRunner is the package containing this utility.
WebConfigTransformationRunner.exe WebConfigFilename TransformFilename OutputFilename
I see this package being used in two ways.
First, using this in an automated build as part of a packaging process to pre transform configuration files for different environments. This was the main reason I created this library. I am using it in a build in TeamCity to transform my web.config file for an ASP.NET MVC application as part of an automated CI build and deploy.
The second scenario that seems very useful would be to access this package from the install script (install.ps1) from a nuget package. The current configuration transformations that nuget supports is very limited. It works best when you have static configuration nodes that will never change. If you have a node that has an attribute that a user / developer may change, then using a configuration transformation would be more reliable. Since this tool is delivered as a nuget package, the command is available in the path of the nuget console, so a package that needs to run a transformation would just need to take a dependency on this package, then it could run the EXE command from the install script, on the files it wants to transform. I could see running the main web.config with a transformation that is located in the packages content folder, for example.
Want to Help?
The project is open source and available on github. Please submit issues, ideas or pull requests!