Skip to content

Instantly share code, notes, and snippets.

@tcmorris
Last active August 29, 2015 14:24
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 tcmorris/54d5d98c1ea70a73c266 to your computer and use it in GitHub Desktop.
Save tcmorris/54d5d98c1ea70a73c266 to your computer and use it in GitHub Desktop.
MSBuild targets for config transforms. Will pick up any *.config in root or config folder per environment and also allows for machine specific transforms.
<?xml version="1.0" encoding="utf-8" ?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask TaskName="TransformXml" AssemblyFile=".\Deploy\Microsoft.Web.Publishing.Tasks.dll" />
<ItemGroup>
<ConfigFiles Include=".\*.$(Environment).config;.\config\*.$(Environment).config">
<OriginalPath>%(ConfigFiles.RootDir)%(ConfigFiles.Directory)$([System.String]::Copy('%(ConfigFiles.Filename)').Replace('.$(Environment)',''))%(ConfigFiles.Extension)</OriginalPath>
</ConfigFiles>
<ConfigFiles Include=".\*.$(COMPUTERNAME).config;.\config\*.$(COMPUTERNAME).config">
<OriginalPath>%(ConfigFiles.RootDir)%(ConfigFiles.Directory)$([System.String]::Copy('%(ConfigFiles.Filename)').Replace('.$(COMPUTERNAME)', ''))%(ConfigFiles.Extension)</OriginalPath>
</ConfigFiles>
<Transforms Include=".\*.*.config;.\config\*.*.config" />
</ItemGroup>
<Target Name="TransformConfigs">
<Message Text="Transforming @(ConfigFiles->Count()) config(s)..." Importance="High" Condition="'@(ConfigFiles->Count())' &gt; 0" />
<TransformXml Source="%(ConfigFiles.OriginalPath)" Transform="%(ConfigFiles.FullPath)" Destination="%(ConfigFiles.OriginalPath)" StackTrace="true" Condition="'@(ConfigFiles->Count())' &gt; 0" />
</Target>
<Target Name="DeleteTransforms">
<Delete Files="%(Transforms.FullPath)" />
</Target>
<Target Name="Debug">
<Message Text="Found transform %(ConfigFiles.Filename)" Condition="'@(ConfigFiles->Count())' &gt; 0" />
<Message Text="Deleting %(Transforms.Filename)" />
</Target>
</Project>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment