There have been several requests floating around to be able to use XDTs (the technology behind Web.Debug.Config/Web.Release.Config) with other XML files within the project� To make that feasible I wrote a XmlDocumentTransform.targets file which can generically transform any XML file using the standard Web.Config Transformation syntax introduced with VS 2010�
Learn more about XDT & Web.Config Transformation here�
Now to get started first download XmlDocumentTransform.targets file from my Skydive�
Follow the below simple steps to get transformation working for any well formed XML file in your project�
- Step 1: Save the downloaded XmlDocumentTransform.targets to %ProgramFiles%\MSBuild\Microsoft\VisualStudio\v10.0\Web\XmlDocumentTransform.targets
NOTE: I would highly encourage you to make a copy of the Microsoft.WebApplication.targets file as backup before you do Step 2 below, as if this file is modified incorrectly then your VS 2010 instances might start showing funny problems which will be virtually impossible to debug and the only option left with you will be to repair/uninstall-install VS 2010� (i.e. proceed at your own risk :-))
- Step 2: Put following line of code in Microsoft.WebApplication.targets file just before closing of the Project node i.e. before </Project>...
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\XmlDocumentTransform.targets" Condition="Exists('$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\XmlDocumentTransform.targets')" />
The Microsoft.WebApplication.targets file is located at %ProgramFiles%\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications...
NOTE: Changing the above targets file will allow you to use this functionality with all the Web Application Projects (WAPs), if you just want to change this for the current project then you can put the same Import node in .csproj or .vbproj as well... If you use per project model then you can also check in this file into source code control and have your team use it seamlessly�
- Step 3: Open your .csproj/vbproj file and insert the below property in <PropertyGroup> section <AllXmlsToTransform>Settings.xml;app.config</AllXmlsToTransform>
NOTE: The Settings.xml or app.config can be replaced with the name of Xml files you want to transform�
- Step 4: Insert <OnAfterTransformWebConfig>TransformXml;</OnAfterTransformWebConfig> similar to #3 above but do not modify the TransformXml; text here� This is the actual hook which ties in your project to this generic XDT system... After making the Step 3 & Step 4 changes your project file should have below content�
- Step 5: Create Setting.Debug.Xml or similar files and put XDT syntax in them... You need to make sure in the .csproj/.vbproj file of yours you have the DependentUpon property is set like the example below:
<Content Include="Configuration\Settings.xml" />
<Content Include="Configuration\Settings.Debug.xml">
<DependentUpon>Configuration\Settings.xml</DependentUpon>
</Content>
<Content Include="Configuration\Settings.Release.xml">
<DependentUpon>Configuration\Settings.xml</DependentUpon>
</Content>
NOTE: The above will allow your solution to look pretty, i.e. just like web.debug.config and web.release.config files show nested under web.config, your *.$(configuration).* files will show nested under your parent file too�
With the above 5 steps you are all set to use XDT with any of the deployment models covered in the Overview of Web Deployment Post� In a way above steps harness the power of Web Publishing Pipeline (WPP) extensibility model and you can do several other extensions like above if you are familiar with MsBuild sytax�
SAMPLE: The remainder of the post is just showing you the steps to test whether the changes you made worked or not (i.e. the remaining half of the post is just playing with what you already accomplished in the first half)� :-)
- To test the above target file I created the below MVC 2.0 project structure:
- Once you put DependentUpon node in your project file you will have to click the �Show All Files� icon on the solution explorer for VB Projects to see Settings.Debug.Xml
- My Settings.xml file looked as below:
- My Settings.Debug.xml file looked as below:
- To test out I tried simple �file system� publish (Right click on project and say Publish)� The new WAP Publish dialog for me looked as below:
- After publishing my C:\TestPublish folder looked as below:
- Note that Settings.Debug.xml was removed from my final publish location as it is not required for my web to function and the content of Settings.xml file were transformed and looked as below:
TeamBuild/Commandline Approach: You can also use your new transformations from TeamBuild/MsBuild by using the below command (from VS 2010 Command prompt if you are trying locally):
MsBuild MyXDTTestProject.csproj /t:TransformXml
The output of the command line transform should look as below:
As specified above your transformed XML will be stored in obj\$(configuration)\Settings.xml�
As such feel free to open the XmlDocumentTransform.targets file which you download, I have tried to put as much comments as I could to make it readable� If you go through it I am sure you will be able to do many other cool things out of it�
-Vishal
Update Contact :
No Wa/Telepon (puat) : 085267792168
No Wa/Telepon (fajar) : 085369237896
Email : Fajarudinsidik@gmail.com
No Wa/Telepon (puat) : 085267792168
No Wa/Telepon (fajar) : 085369237896
Email: Fajarudinsidik@gmail.com
atau Kirimkan Private messanger melalui email dengan klik tombol order dibawah ini :