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

(127) Review
Visual Studio
2013, 2012, 2010
Download (192,598)
E-mail Twitter Digg Facebook
Add to favorites
Reviews (127)
Q and A (245)
Sign in to write a review
Sort by:

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 :)

by Blue Ajaz | June 03 2015

by dittodhole | April 23 2015

by Tim Long | April 20 2015

5 stars, a genuinely useful tool whenever you need different connection strings, diagnostic logging (etc, etc) configuration for release vs. debug builds.

by MSreenath | March 17 2015

Hi Ibrahim,

Thanks for writing this great tool. I have a question regarding this tool.

Question 1:

How this tool will help if I am creating ONE setup project (msi project) for all my environments and have multiple configuration files ? How can I build and deploy in this case.

As far as I can see this tool works great if you are doing file copy deployment. It just does not make sense to create setup file (read msi) for each environment, if that route I am taking for this

Question 2:

I have 5 different applications (Three Console Applications, Two Windows Service and Two Web)

Can I keep a one master config file and update all these five applications without copying same settings to app.staging.confing likewise to all applications.

Again, it takes lot of time and create this tool, I myself struggled create such tool but it is far from the level you have reached.

Please let me know. I am waiting for your response.


by jhjhkl758 | March 12 2015


by Cosmin Vana | January 19 2015

by Victor Lindsey | January 16 2015

I really like this tool for Visual Studio (both 2010 and 2013), and cannot understand Microsoft's reluctance to adopt this as a standard feature for all future versions of the IDE.

I found that for me, using the VSIXinstaller for each edition of Visual Studio I'm using, worked well to get it installed. And I have to make sure that custom XML-styled configuration files are marked with "Copy always" or "Copy if newer".

by 程湘之間 | January 06 2015

It's a very good add-on for Visual Studio.
Maybe making a formal part of Visual Studio will be a good idea.

by Rehan Saeed | December 15 2014

Vote for this feature to be built into Visual Studio. Find out more here:

by Omar Gameel Salem | December 08 2014

by Slammer17 | December 02 2014

Recently updated via nuget from :

<package id="SlowCheetah" version="" targetFramework="net45" />


<package id="SlowCheetah" version="2.5.14" targetFramework="net45" />

and after this update, Slow Cheetah stopped transforming files within VS2013 Ultimate Update 4

I rolled back to and it now works fine again.

by Josh Gallagher | October 15 2014

The simple mechanisms for replacing parts of XML that are used by
msdeploy on web.config are equally useful with any other config files.
SlowCheetah does a great job of extending that functionality in a
transparent way to other files.

by chris.morgan | September 04 2014

This extension has saved my countless hours setting up automated builds and continuous deployments. This is a must have if you need to do configuration file transforms during your build and deployment process.

by Gustin G | September 02 2014

Excellent tool - I use it in every project to achieve a clear configuration scenario.

by Thomas TwoAngel Rud Rasmussen | August 20 2014

Doesnt transforms, doesnt add new transforms, doesnt transform web.config as stated.

Soo, that's a no go im my environment

by Toons33 | July 21 2014

Terrific work -- the only problem with web.config can be solved with a little trickery (

THANK YOU SlowCheetah team.

by Victor Pascual Villanueva | July 15 2014

Making things a lot easier for Selenium testing across different browsers:

by Dmitriy N. Dokshin | July 08 2014

by Frank Fajardo | June 26 2014

Very useful. I like that it looks at the Publish Profiles, although be cautious when you rename a Profile, it does not rename the previously generated transform files. But you can always regenerate and delete the old.

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

  • Transform on build works but on publish not so much
    3 Posts | Last post August 30, 2013
    • I have been trying to get this to work with a web application called EPiServer CMS. The Web.config loads configuration sections from a number of files (configSource=). for example: Appsettings.config, episerver.config and episerverframework.config. 
      I have successfully got this working for all my files on "build" so that all the files build according to the correct transform file. Thanks to your page here: Wonderful, thank you :)
      But, the issue I am having is on publish. When I choose to publish my website only the web.config file and appsettings.config are delivered to the output folder (and correctly transformed). There are two other files in the project (EPiServerLog.config and FileSummary.config) which I do not transform and both of these files are also copied.
      Can you suggest any reason why some of the files would not be copying? (episerver.config and episerverframework.config do not copy). It doesn't matter what I set the Build Action or the Copy to Output Directory to.
      Thanks in advance, both for any light you can shed on the issue and for an amazing extension =)
    • I seem to have solved it by removing the files from my project and re-adding them. Now all seems to be working the way I want it =)
    • Just a quick note: The files before I removed them all appeared under web.config in visual studio (I mean there was a + button and the files would be grouped under) - now they are not grouped there it works fine. Hope this helps anyone else :)
  • What is wrong?
    2 Posts | Last post August 21, 2013
    • Hi,
      I'm using xdt:Locator="Condition(ID/text()='1')" to select <data> from:
      Sometimes it works and smonetimes not, can you tell me what can I do wrong that it isnt working?
    • PS. I'm doing this that way:
          <Data xdt:Locator="Condition(ID/text()='1')">
  • Must be missing something...
    1 Posts | Last post August 20, 2013
    • Just tried adding this to a VS2010 web application project and everything seemed to be ok but when I right click the web.config file I just see the stock Add Config Transform.  I can see it added to packages.config etc
      Is there something else I need to do to enable it?  
  • Visual Studio 2013
    1 Posts | Last post August 09, 2013
    • Can we expect an update for VS2013 in the near future by any chance? Was very sad to find out this is not currently compatible. Only extension from my toolset that is missing currently :/
  • Wrong filename on build server
    1 Posts | Last post August 06, 2013
    • This just recently started happening after an upgrade to Azure 2.1 NuGet components (not that this is related).  Anyway, my SlowCheetah transformations are still working on the build server, the problem is the output file name is wrong.
      I need myproject.dll.config to be the result of the transform, instead it is only transforming app.config.
      How do I tell SlowCheetah to output its transform result as myproject.dll.config?
      Thank you.
  • TransformXml skipped due to false condition
    2 Posts | Last post July 25, 2013
    • SlowCheetah has worked for me before to transform my App.config, using App.Debug.config, etc. This is in a Windows Service application.  It has worked on the build server, where I deploy by git cloning, as well without any extra steps. But now I've cloned my repo after a fresh install and it's not working for me. My OS is the same as it was before (Windows 7, 64-bit).
      Here's a clip from the build output:
      1>Task "SlowCheetah.Xdt.TransformXml" skipped, due to false condition; ( Exists('%(RelativeDir)%(Filename).$(Configuration)%(Extension)')
      1>                              and '%(Link)'=='' ) was evaluated as ( Exists('.Debug')
      1>                              and ''=='' ).
      Thanks for your help.
    • This turned out to be my own mistake. The namespace for some application settings had changed and I hadn't updated the xml in my App.Debug.config.  So they just weren't being copied because they didn't match.  It's working now. 
      Oddly enough, I'm still seeing the same message in my build output.
  • Build Error on MVC project when combined wtih MvcBuildViews option
    4 Posts | Last post July 15, 2013
    • First this is a fantastic tool, thank you.  I have a web project where we use the configSource option to redirect the web.config's AppSettings config section to an external file.  Your plugin is working great for transforming the dedicated AppSettings file *except* when we use the following option in our MVC Project:
      Using this setting over any Property Group invokes the aspnet_compiler to check MVC Views and/or Web Forms for compilation errors during the build process. When this property is set to true the configuration will not build, throwing the following error:
      {local dir}\{Solution}\{WebAppProject}\obj\{config}\csautoparameterize\original\web.config : error ASPCONFIG: An error occurred loading a configuration file: Directory 'C:\Data\Repositories\IPMS\IPMS.WWW\obj\dev-debug\csautoparameterize\original\App_Data\config' does not exist. Failed to start monitoring file changes.
      In our case the web.config file uses the configSource to redirect the following out into separate config files:
      appSetttings --> /App_Data/config/appSettings.config
      connnectionStrings --> /App_Data/config/connectionStrings.config
      Does this have to due with the timing of what files get transformed first?  Is there a workaround you are aware of?
    • Wow sorry Sayed my message got sandwiched all together.  I'll send you a formatted equivalent to your inbox.  Thanks
    • Hi DaFlookie, I just responded back to your email. We can just work it out there.
    • Hello, I see that the discussion is quite old but I have a similar problem. If it's possible could you please say what the solution to the described problem was?
  • Use SlowCheetah for other file extensions
    1 Posts | Last post July 08, 2013
    • Is it possible to use SlowCheetah for any other file extension? AnyConfig.config.transform for example? The reason for this requirement is that the sitecore cms include it's own merging logic for config files by application start. We solve this problem by using ctt and the suffix *.transform. But this tooling doesn't allow to use the great preview tool comes with slowcheetah. It's only console magic.
  • Visual Studio 2013 Support
    1 Posts | Last post July 02, 2013
    • I realize this is early but I have come to rely heavily on SlowCheetah and wonder when you will have a build that targets VS2013.
  • XML Transformation error if comma in attribute value
    2 Posts | Last post June 22, 2013
    • Hello,
      I have this lines in my app.config files :
      <unity xmlns="">
              <type type="Edenred.Framework.Caching.ICacheManager, Edenred.Framework" 
                    mapTo="Edenred.Framework.Caching.HttpRuntimeCacheManager, Edenred.Framework.Caching">
                <lifetime type="singleton" />
      And here is my xml transformation fille :
      <unity xmlns:xdt="" xmlns="">
                      <type mapTo="Edenred.Framework.Caching.AppFabricCacheManager, Edenred.Framework.Caching"
                            xdt:Locator="XPath(unity/containers/container/types/type[@type='Edenred.Framework.Caching.ICacheManager, Edenred.Framework'])"/>
      My xpath query below is valid (tested on internet with a XPath validator) :
      /unity/containers/container/types/type[@type='Edenred.Framework.Caching.ICacheManager, Edenred.Framework']
      But I have this error when I try to transform XML config with Slow Cheetah :
      "XPath requires exactly 1 argument"
      If I remove the "," in the value of the "type" attribute, that works.
      Thanks for your help.
    • This is caused by a bug in the Microsoft.Web.Publishing.Tasks.dll assembly. There is an easy workaround in your situation, which is to wrap your type attribute in parantheses, e.g.
      XPath(unity/containers/container/types/type[@type='Edenred.Framework.Caching.ICacheManager, Edenred.Framework']) =>
      XPath(unity/containers/container/types/type[(@type='Edenred.Framework.Caching.ICacheManager, Edenred.Framework')])
71 - 80 of 245 Items