Skip to content

Instantly share code, notes, and snippets.

@tillig
Created April 13, 2017 18:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tillig/d72f27f3af6abc97fd14a1eb69a1c775 to your computer and use it in GitHub Desktop.
Save tillig/d72f27f3af6abc97fd14a1eb69a1c775 to your computer and use it in GitHub Desktop.
Format XML configuration files on build with tidy
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="All" InitialTargets="_SetVersion" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<Import Project="$(MSBuildProjectDirectory)\toolset\msbuildcommunitytasks\MSBuild.Community.Tasks.Targets"/>
<Target Name="_Tidy">
<ItemGroup>
<ConfigFiles
Include="$(MSBuildProjectDirectory)\**\*.config"
Exclude="$(MSBuildProjectDirectory)\packages\**\*.*;
$(MSBuildProjectDirectory)\**\packages.config;
$(MSBuildProjectDirectory)\**\NuGet.config;
$(MSBuildProjectDirectory)\**\repositories.config;
$(MSBuildProjectDirectory)\.vs\**\*.*" />
</ItemGroup>
<Message Text="Cleaning up configuration file formatting." />
<!--
* HTML Tidy cleans up the config file XML and places it in a temp location (filename.formatted)
* A post-formatting task cleans up key/value pair nodes to be flat and easier to read.
* The formatted config file is copied over the top of the original XML file and the temp file is deleted.
-->
<Exec Command="tidy.exe --input-xml yes --output-xml yes --preserve-entities yes --indent yes --indent-spaces 4 --input-encoding utf8 --indent-attributes yes --wrap 0 &quot;%(ConfigFiles.FullPath)&quot; > &quot;%(ConfigFiles.FullPath).formatted&quot;" WorkingDirectory="$(MSBuildProjectDirectory)\toolset\tidy" Condition="'%(ConfigFiles.FullPath)'!=''" />
<FileUpdate Files="%(ConfigFiles.FullPath).formatted" Regex="&lt;add\s+(key|name)=&quot;([^&quot;]*)&quot;\s+value=&quot;([^&quot;]*)&quot;\s+/&gt;" ReplacementText="&lt;add $1=&quot;$2&quot; value=&quot;$3&quot; /&gt;" Condition="'%(ConfigFiles.FullPath)'!=''" />
<Copy DestinationFiles="%(ConfigFiles.FullPath)" SourceFiles="%(ConfigFiles.FullPath).formatted" Condition="'%(ConfigFiles.FullPath)'!=''" />
<Delete Files="%(ConfigFiles.FullPath).formatted" Condition="'%(ConfigFiles.FullPath)'!=''" />
</Target>
</Project>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment