Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Make Web.config transformations work locally

I want to get web.config transformations working locally but apparently the transformations only occur when doing deployments.

Does anybody know of a way to run the msbuild target "TransformWebConfig" without it going through the "rebuild" process and also specify and output directory where to spit out the transformed web.config?

EDIT: Using Sayed's answer, I created a .bat file to do run the task for me:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Msbuild.exe "D:\Demo\Transformation.proj" /t:TransformWebConfig 

copy /Y  "D:\Demo\Web.config" "D:\MyProject\Web.config" 

del ""D:\Demo\Web.config"

the "Transformation.proj" is a copy of Sayed's code snippet in the answer below. Just specify the source, target, and destination for the transformation. The new file, in this case, the transformed "web.config" will be in the "D:\Demo" directory. I am simply copying it over to overwrite my project's web.config and, finally, deleting the generated file in the "demo" folder.

Also, I created a macro to run this batch file and perform the tranformation for me:

Public Module DoTransform
    Sub RunTransformBatchFile()
        Try
          Process.Start("D:\Demo\RunTransform.bat")
        Catch ex As System.Exception
            MsgBox(ex.Message)
        End Try
    End Sub
End Module

You can also add a button on your toolbar to run this batch and/or assign a shortcut key to execute.

like image 705
Diego C. Avatar asked Aug 31 '10 22:08

Diego C.


People also ask

How does Web config transform work?

A Web. config transformation file contains XML markup that specifies how to change the Web. config file when it is deployed. You can specify different changes for specific build configurations and for specific publish profiles.

How do I test a Web config transform?

Open your solution in Visual Studio, expand the transformation node of your config file, select the transform to review and choose “Preview Transform” from the menu.

What is Xdt transform replace?

A Transform attribute on a parent element can affect child elements even if no Transform is specified for them. For example, if you put the attribute xdt:Transform="Replace" in the system. web element, all the elements that are children of the system. web element are replaced with the content from the transform file.


2 Answers

if you want to transform a config file without using the Web Publishing Pipeline then you just use the TransformXml task manually. I've written a detailed blog post on this at http://sedodream.com/2010/04/26/ConfigTransformationsOutsideOfWebAppBuilds.aspx, but here are the high lights:

<Project ToolsVersion="4.0" DefaultTargets="Demo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">     <UsingTask TaskName="TransformXml"              AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>      <Target Name="Demo">         <TransformXml Source="app.config"                       Transform="Transform.xml"                       Destination="app.prod.config"/>     </Target> </Project> 

Here I manually transform the app.config file using transform.xml file and the destination file is app.prod.config.

One thing that you mentioned was being able to do transformation locally when running the app. The reason why we only perform the transform on package/publish is because if we transformed web.config itself then next time you debug your app the web.config gets transformed again. So for example if in your web.debug.config you have the transformation to add a value to config, everything is OK the first time you add that but then the next time your run/debug your app it will get added again. So it is best to avoid that.

like image 158
Sayed Ibrahim Hashimi Avatar answered Sep 27 '22 22:09

Sayed Ibrahim Hashimi


If you are using Visual Studio 2015, you can just right click on the transform of the desired environment, and click "View Preview" ... It will then generate the transform, and you can copy and paste that into the normal Web.config file for debugging purposes. Just don't commit it!

If you are using Visual Studio 2013, you can install the SlowCheetah - XML Transforms extension

like image 39
Garrett Simpson Avatar answered Sep 27 '22 22:09

Garrett Simpson