SlowCheetah - XML Transforms


This package enables you to transform your app.config or any other XML file based on the build configuration. It also adds additional tooling to help you create XML transforms.. Written by: Sayed Ibrahim Hashimi, Chuck England and Bill Hiebert

(146) Review
Visual Studio
2013, 2012, 2010
Download (221,087)
E-mail Twitter Digg Facebook
Add to favorites
Reviews (146)
Q and A (258)
Sign in to write a review
Sort by:

by rostolator | Thu 11:39 PM

a link to the VS2015 compatible version would be very helpful .. oh thanks Mike (3 comments below)

by CodeSourcerer | Thu 2:11 PM

by Jürgen Bayer | September 09 2016

Works perfectly and is even better than the ASP.NET transformation since it transforms even when running the project in Visual Studio.

by Mike DePouw | May 27 2016

For whatever reason, there's a new project for VS 2015.

by Ondřej | May 11 2016

Looks extremely useful and exactly what I need, but it does not work in Visual Studio 2015 Community Update 2.

by nkomp18 | May 11 2016

I am extremely frustrated with SlowCheetah.
I tried to use it in many occasions and it never quite worked for me.
The main problem is that I have multiple configurations like:
QA, UAT, PRD, Live, Local, DEV, etc and I want to be able to define those myself.
Attempting to change the configuration manager of the solution causes an array of problems that need hours to be resolved. Notably, the underlying projects will still not generate the new build configs, which leads to build problems, DLL issues and finally I can't get rid of Debug and Release configurations of which I don't want any configs to be generated.
Also if I add my configurations to the configuration manager,
How hard is it to let the user define these in a simple XML file?
Until this very simple feature is added, SlowCheetah is of no use to me and I assume many other developers

by EvangelistaLion | May 10 2016

When work in VS 2015 please ?? Thank you

by Bhuard | May 06 2016

Used it for SQL unit test app.config.


by Dave_MEC | January 19 2016

This is an extension I can't live without. We use this in everyone of our applications. It should be added as part of Visual Studio going forward.

by jmelllo | November 19 2015

by DragonOfId | November 12 2015

This extension has made configuring console programs for multiple environments SO much easier. I have no idea why this functionality isn't native in VS!

by George Birbilis | November 05 2015

see for VS2015

by the real Tim Partridge | October 23 2015

Works as advertised. Downloaded, installed, restarted Visual Studio. Done

by Toomas Talviste | September 23 2015

by Kevin Landymore | September 15 2015

Doesn't work with a build controller. Useless for me sadly, these things should work "out of the box".

by Richard M Lee | September 06 2015

Invaluable! A feature that should definitely be native to visual studio.

by SabbirSpider | August 14 2015

Great Package.It reduces my lot of manual task for my windows application

by sukhdeep.singh1 | July 31 2015

Great plugin, a life saver :)

by ronnotel | July 18 2015

I've been coding large financial trading frameworks in VS/C# since .NET 1.1 days (12/13 years). From this perspective, I can affirmatively state that Slow Cheetah is by far the most productive package that is not currently integrated into the VS tool. I'm walking through a major rollout now involving five different staging environments and over twenty different server configs. Without Slow Cheetah, the other 35 people in the deployment team waiting on my builds would be left high and dry while I tried to manage the configs by hand. VS management - what the *hell* are you thinking? Integrate!

by MGSman123 | June 30 2015

Excellent extension! Definitely essential to my VS toolbelt going forward. Works like a charm in VS2015 too. Just needed to tweak the vsextension xml inside the package :)

1 - 20 of 146 Items   
Sign in to start a discussion

  • Problem with files copying to 2.5.10 directory
    6 Posts | Last post October 06, 2014
    • Not sure if the installer got botched, but after upgrading to 2.5.10 from, our test machine began to copy files into a C:\Users\\AppData\Local\Microsoft\MSBuild\SlowCheetah\v2.5.10 directory.  The files it copied were the project files that were being built. I was able to work around the issue by defining the SlowCheetahToolsPath in the SlowCheetah.Transforms.targets file to define the tool path.  Is there something I can do so I don't have to hack the targets file manually in order to get SC to work?
    • Can you try after a VS restart and let me know if you still have issues?
    • After both a VS restart and machine restart, SC is still creating a v2.5.10 directory next to the v1 directory in the user profile\local\microsoft\msbuild\slowcheetah directory.  The contents of the directory seem to be all of the project files for any project that contains transforms. They get copied over each other as a project with a transform is processed.  When I uninstall and reinstall SC, the problem persists.
    • I worked around this problem with a conditional Using in my SC tarets file.  Stick these two lines in @ line 36 in your C:\Users\<you>\AppData\Local\Microsoft\MSBuild\SlowCheetah\v1\SlowCheetah.Transforms.targets file.  The 2nd using will use the correct v1 location.
        <UsingTask TaskName="SlowCheetah.Xdt.TransformXml" AssemblyFile="$(sc-MSBuildLibPathLocal)SlowCheetah.Xdt.dll" Condition="Exists('$(sc-MSBuildLibPathLocal)SlowCheetah.Xdt.dll')"/>
        <UsingTask TaskName="SlowCheetah.Xdt.TransformXml" AssemblyFile="SlowCheetah.Xdt.dll" Condition="Exists('SlowCheetah.Xdt.dll')"/>
    • The second UsingTask solved my problem too. Thanks
    • @W. Paap: 
      When doing a xdt:Transform="Replace" on the root element I get the error "Could not write Destination file: Object reference not set to an instance of an object." too.
      When I changed to a xdt:Transform="SetAttributes(...)" I got it to work on the root element too.
      Note: I only needed to change the attributes of one element.
      Note to editors here: Change my syntax if replying to another user is made in another way.
  • PropertyGroup location in the project file might break the transformation !!
    2 Posts | Last post September 19, 2014
    • After hours of debugging trying to understand why SlowCheetah stopped working after updating to the last Nuget package I discovered that if the "SlowCheetah" PropertyGroup is at the end of the csproj file, file transformation stops working.
      If I move it to the top, it works.
      It stopped working because when I updated the Nuget package, the PropertyGroup has been removed from the csproj file and added back, but at the end.
      After more research, it seems that the "SlowCheetah" PropertyGroup must be before the following import (the reason being obvious when you know it ^^) :
      <Import Project="$(SlowCheetahTargets)" Condition="Exists('$(SlowCheetahTargets)')" Label="SlowCheetah" />
      Could you do something about that ?
      It's a quite hard issue to identify and a simple package update might break SlowCheetah...
    • Thank you julienN!!! You saved my day. At first I thought that the problem is in the build server, but no, actually it's the problem inside Slow Cheetah. I think it should be fixed ASAP, it's too dangerous to use such tool in production...
  • Rename transformation file
    1 Posts | Last post September 02, 2014
    • Hi,
      I added a transformation file  from right click context menu of my Connections.config file subsequent to previous additions done a few months ago.
      The file added is labeled 'Connections.Profile1.config'.  Right click on the file, but there is no option to rename the file. How do I rename the file to Connections.QA2.config.
  • Transformed files from class library project not copied to the referenced projects
    2 Posts | Last post August 08, 2014
    • Scenario:
      I have a class library project with custom .config files. Build Action for these config files are set to 'Content' and 'Copy Always'. This library project is then referenced in at least 4-5 console applications within the same solution. When the solution is built the class library's assembly and the custom config files are copied on to the the referenced projects bin folder.
      What I am trying to do:
      Use SlowCheetah to transform custom config files
      Though SlowCheetah transforms the config files within the class library project it doesn't copy the transformed file into the referenced projects. i.e it always copies the source/original file.
      Found couple of other threads but none of them were solutions based on SlowCheetah, any suggestions would be helpful. Note that I am using Install Shield Limited Edition, so the solution needs to work for .msi/setup files. Also, I dont want to link files and apply transform on the linked files as then I would have to do the same transform on all referenced projects.
    • Given ClassLibararyA references ClassLibraryB:
      * Ensure configs from both class libraries are named App.config
      * Configure transformations for both App.configs using SlowCheetah (even if you only care about one)
      * Build
      In the output folder for ClassLibraryA, you will find ClassLibraryB.dll.config (the transformed App.config of ClassLibraryB).
  • xdt:Locator example
    2 Posts | Last post July 01, 2014
    • Hi Sayed,
      I'm using slow cheetah to manage a custom XML file.  The elements that I want to update/replace don't have an attribute assigned for me to be able to use the xdt:Locator="Match(Attribute)" type of syntax.  
      Can you point me to an example/sample of xdt:Locator that does not use the Match syntax?  I've tried using Xpath statements but not having any luck - maybe I'm doing something wrong?
    • Clarification to my question above, if my XML file is formatted as below:
      <?xml version="1.0" encoding="utf-8" ?>
      <Configuration xmlns:xsi="" xmlns:xsd="" xmlns:xdt="" xmlns="">
        <!--Sample Service1
        <ConfigSection Service="Service1">
        <!--Sample Service2
        <ConfigSection Service="Service2">
        <!--Sample Service3
        <ConfigSection Service="Service3">
      I would like to use Xpath locator to find all instances where ConfigValue = ##ConnectionVariable1 and replace with a new value in the transform.  I'm having difficulty with how to leverage the locator syntax to accomplish this.
  • Failing Team Foundation build with v2.5.10.6
    3 Posts | Last post June 12, 2014
    • Hi I've been using SlowCheetah for over a year.  Awesome, thanks!
      However I've run into an issue I need help with please. Apologies it's not a one line question...
      The scenario is that in a solution which uses the "old" NuGet package restore (NuGet.exe and targets file checked into source control, no packages checked in), SlowCheetah v2.5.10.6 does not work on my Team Foundation Build server.  This is the actual error I get on the build server:
      C:\Builds\11\PaulSlowCheetahTest25105\Properties\SlowCheetah\SlowCheetah.Transforms.targets (153): The "TransformXml" task could not be loaded from the assembly C:\Builds\11\PaulSlowCheetahTest25105\Properties\SlowCheetah\SlowCheetah.Xdt.dll. Could not load file or assembly 'file:///C:\Builds\11\PaulSlowCheetahTest25105\Properties\SlowCheetah\SlowCheetah.Xdt.dll' or one of its dependencies. The system cannot find the file specified. Confirm that the <UsingTask> declaration is correct, that the assembly and all its dependencies are available, and that the task contains a public class that implements Microsoft.Build.Framework.ITask.
      The \Poperties\SlowCheetah dir of course just has the targets file inside.
      I have another solution using v2.5.10.3 with NuGet package restore and that is fine. It seems a recent change since 10.3 has introduced this issue.
      I searched the web and found this:
      At then end of the comments lucusc says: "What fixed it for me was to change how Nuget was restoring packages from the old way (right click solution and click Enable Nuget Package Restore) to the new preferred way. See the 2 links below for more details."
      However, using Automatic Package Restore poses other issues for me as my build workflow is customised from an earlier TFS version so I can't use the new TFS2013 build workflow which has Package Restore built in.
      Can you suggest a way forward? 
    • I see a few possible options at the moment:
      1. Stick with the "old" NuGet package restore, and install older SlowCheetah v2.5.10.3 which does work OK on my build server.
      2. Move to Automatic Package Restore, with latest SlowCheetah, but use this workaround to force the Package Restore to happen before the solution is built:
      3. Move to Automatic Package Restore, with latest SlowCheetah, and modify my Team Build workflow to run the NuGet Package Restore before doing the solution build.
      None of these options are particularly attractive to me.  I guess 3 is the right way to go but I don't relish the idea of tinkering with the TFS build workflow.
      I'd be keen to hear your thoughts!!
    • FYI I went with option 3 in the end.  So updated my build workflow to do a NuGet restore before the MSBuild.  When I looked into it I found a "NuGetRestore" workflow activity so it was pretty simple to achieve.  I hope this helps somebody else!
  • Conflict with VS 2013 Git integration
    3 Posts | Last post May 29, 2014
    • The transforms work as expected for me, but they have broken the Git integration in Visual Studio so that I cannot .gitignore any of the transformations (or at least, when I do, I can't use Visual Studio's git integration). 
      I need *.Debug.config files to be ignored, because they have developer specific configurations that should not be committed. 
      This is caused by the ms-persist.xml file that SlowCheetah puts within the .git folder, which Visual Studio then uses as an override to the .gitignore file.
      There are various work-arounds to this issue, but ultimately, I'd like SlowCheetah to not put that file into .git at all, so that I can manage my ignores.
      new project in Visual Studio, and in a git repo.
      Transform app.config.
      Add "app.Debug.config" to .gitignore and save everything.
        In Visual Studios "Team Explorer" window, the app.Debug.config shows as a pending change that needs to be committed. 
        In Git command line, git status does not show app.Debug.config as a pending change.
    • Like many others here, we're seeing Slow Cheetah fail. It has been working in our web app for several months, allowing us to have different configs, one for release, one for cloud. It would be really nice to have it run on F5, but we can live with it for now.
      However last week it suddenly started throwing errors in our build, the MSI is still created but we're getting messages about Slow Cheetah dll not being found. In Visual Studio 2010, I can right button click and "Preview Transform" and it does show me the before and after. However it no longer works when we publish to Azure (we use VS2010 on a deployment box to do that - too small a team to have a dedicated build manager).
      Similarly, the regular "Release" transform no longer works on the build server.
      I think the time has come for Microsoft to adopt this tool, which is basically sound, and give it the support it deserves.
    • SlowCheetah doesn't create those files. Please file a bug with Microsoft at
  • Transformations and Embedded Resource
    4 Posts | Last post May 12, 2014
    • Hi Sayed,
      I have an xml file as an embedded resource to be used for nhibernate configuration. I would like to embed the transformed file as the embedded resource rather than the original. Since the transformed files are copied in to the relative bin\$(Configuration) the build will and does include the non transformed file as the embedded resource. I was wondering if there is a simple way using "Slow Cheetah" to get the transformed file included as the embedded resource.
      One way would be to run the transforms before the build begins and add the xml file as a Link from the bin\$(Configuration) so that you always get the transformed file rather that the original.
    • Hi Kamran, thanks for your feedback. This is not supported but you could always use the TransformXml task directly in your project files to realize such scenarios. 
    • Hello Sayed and Kamran,
      I am not at all familiar with msbuild tasks, but I also have the need to transform embedded .resx files and .settings files.  Do either of you have suggestions how to modify the .csproj file to accomplish this?
    • Hi guys,
      I also need to transform embedded resources. Could you shed some light on how to accomplish this?? Thanks!
  • Error slowcheeta.transforms.targets MSBuildLibPathLocal
    1 Posts | Last post May 12, 2014
    • Hi,
      I tried to build an project including slowsheetah version and i got the following build error:
       error MSB3191: Unable to create directory "C:\Windows\system32\config\systemprofile\AppData\Local\Microsoft\MSBuild\SlowCheetah\v2.5.10.2\"
      Although the slowcheeta files are not located there.
      When i replaced the line in the slowcheeta.transforms.targets file:
      it works!
      so, are you going to modify your that file or i miss something to be added?
      fyi: similar issue at:
  • Copy transformed config to cloud package
    2 Posts | Last post May 06, 2014
    • Hello,
      i testing your package. It's great!!!
      One question, when I package a worker role it doesn't copy the transformed App.config to the package. How can i fix it?
      Best regards,
      PD: I'm using visual studio 2013 (update 1)
    • Hello,
      I fixed the problem! 
      Best regards,
31 - 40 of 258 Items