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
We had several self-inflicted wounds with accidentally testing applications that had config entries that pointed to production instead of the quality assurance environment. Because of this we searched and found Slow Cheetah that let us separate the configs into Development, QA, and Production. Things are a lot safer now. Thanks for creating this.
Watched the Visual Studio Toolbox video on this some time ago, but have only just installed it. The tool is great and Its saving me heaps of time! No more building and deploying just to diff config files. Thanks for the work on this extension!
That is a cool stuff. That is to be installed on a develoer computer (VS). But how can I install on build server? Do you have any installation program for that?
Hi Yuri, see my blog post at http://sedodream.com/2012/12/24/SlowCheetahBuildServerSupportUpdated.aspx regarding how to get it working for build servers.
It's on the backlog https://github.com/sayedihashimi/slow-cheetah/issues/39. Should be the next major feature I work on. For web projects this support is much trickier than non-web projects.
Excellent. My app.config's are now updated with a Test, PreProd or Prod SQL Server connection string, even when running (rather than Deploying) my apps. A lifesaver - thanks!
Awesome! I'm just so used to web.config transforms in ASP.Net applications that I also want this functionality in a WinForms Application.
Your add-in works like a charm. Keep up the good work. I hope this add-in will be included into VS 2012 sometime in the future, just like they did with Nuget.
Even debug sessions are effected by the transform, depending on the selecte d solution configuration! Really nice work.
It won't be included in VS2012, and at this time it likely wont ever make it into VS. If you think it should I suggest you make a suggestion at http://visualstudio.uservoice.com/ and have all your friends vote it up.
Hi,
I'm working on visual studio 2008 environment. I read the compatibility with only 2010 or 2012.
Is there an older versions which supports 2008 visual studio?
Can you post the link?
I'm trying to use this to my BIDS 2008 app to configure test and dev environment.
Thanks!
Also, do you recommend any other plugins or recommended way to achieve multi environment config files for the same SSIS package. I would appreciate it.
SlowCheetah does not have any support for DB projects. I'm not sure what support you were envisioning there. We are prioritizing features at http://slowcheetah.uservoice.com/. The best thing to do here is to create an item with the behavior you are looking for. After that we can prioritize that work against the other requests.
Hi,
I was wondering if anyone has managed to get this working with MSTest and deploying item.
I have a BBCSearch.config file that has transforms for the different Environments. This file get transformed and outputted to the correct directory when build.
I can not find away to deploy the TRANSFORMED file to the test directory
When i add it as a deployment items as <projectpath>\BBCSearch.config, the original file is copied not the TRANSFORMED file.
Any ideas?
We have a solution with 8 different build configurations. When I right-click on an app.config file in one of the projects and choose "Add Transform", only app.Debug.config and app.Release.config transform files are created. In other solutions, SlowCheetah works as expected. Anyone have any idea what's going on? Here's a list of the build configurations we have:
Debug
Debug (with DB Deploy)
IntegrationDeploy
Production
Release
SIT
Test
UAT
Could the problem be based on one of the build configuration names? Thanks in advance. Using VS 2010 with SlowCheetah 2.5.1.
The issues is likely how you have created your build configurations. In VS when you create a build configuration it asks if you want to create a Project Configuration as well. You should check that checkbox. With SlowCheetah the transforms are based on Project Configurations, not solution config.
Just solved this, which is somewhat embarrassing, but the issue is that the individual project doesn't have all the configurations that the solution does. Manually adding the new configurations should fix the issue.
I just installed version 2.5.2. I'm trying to publish a WPF application for ClickOnce. I just started up a blank WPF project, added a transform to the App.config, and published. When I install the application, the config file isn't there. Can anybody else confirm? I'm using Visual Studio 2012 Ultimate.
What I do see is that an App.config.deploy file gets created in the publish\Application Files\WpfApplication1_1_0_0_0\obj\Debug\SlowCheetah directory when I publish. When the application is installed, an App.config file gets created using that same folder structure, but there's no WindowsApplication1.exe.config file created where the application needs it.
I have a collection of nodes, in a particular node i want to find a node and replace its values. This is custom section
<MoveTypes>
<Type name="t1">
<subType name="t1s1">
</subType>
<subType name="t1s2">
</subType>
<subType name="t1s3">
</subType>
<Type>
<Type name="t2">
<subType name="t2s1">
</subType>
<subType name="t2s2">
</subType>
<subType name="t3s3">
</subType>
<Type>
</MoveTypes>
How would i replace the Value in Type="t1" , subType ="t1s2" ?
Also how can i write a sysntax, that if node is present replace it otyherwise insert it?
I have a Worker Role project with an app.config. I have 6 different configurations with transforms in them.
When packaging an Azure app for deployment (right-click the "Cloud" project and select "Package"), the worker role's configuration files do not get transformed, or at least packaged up properly.
Is there a way to make this happen?
Hello Tom,
I found this version working:
https://github.com/sayedihashimi/slow-cheetah/issues/5#issuecomment-11874800
Please download the new version pointed in this comment.
Regards,
Gautam Jain
Thanks for sharing the link. If there are any further comments regarding this feature its best to keep those on the issue page <a href="https://github.com/sayedihashimi/slow-cheetah/issues/5">https://github.com/sayedihashimi/slow-cheetah/issues/5#issuecomment-11874800</a>
I am having the same issue. Your comments look hopeful. However, I can't seem to get to the link provided by by gautambjain. Is the link correct? Does it reference a version other than what is currently on the web site? Do I need any permissions to get into https://github.com/sayedihashimi ?
Please advise. Thanks.
I have an update. I did find the 2.5.1 release in the drop box. I uninstalled the prior release, and installed 2.5.1 on an existing project. Unfortunately, it doesn't seem to do the transform when I create a new package for an existing worker role. I am trying to transform app.config (which transforms as desired/expected when I go into debug). Is there anything else I need to do after the install besides re-generate the Azure worker role package?
Note I am using the November 2011 Azure SDK. Are the transforms dependent on the June 2012 Azure SDK release?
Thanks!
Hello,
The XML-translation works very well in Visual Studio for my web project, but when I build a deployment package, I get a web.config with one error : only one XML-transformation doesn't done. I have $(ReplacableToken_xxx)" instead of :
<connectionStrings>
<add name="MyConnectionString"
connectionString="$(ReplacableToken_MyConnectionString-Web.config Connection String_0)"
providerName="System.Data.SqlClient"/>
</connectionStrings>
Here is my xml-transformation :
<connectionStrings>
<add connectionString="Data Source=MyDB\BE,1433; Initial Catalog=MyDB;Integrated Security=SSPI" xdt:Transform="SetAttributes(connectionString)" xdt:Locator="Condition(@name='MyConnectionString')"/>
</connectionStrings>
Thank you for your help.
Thanks for the feedback this is not related to SlowCheetah. This is a part of the Web Project publish/package support. I've blogged more details of this at http://sedodream.com/2010/11/11/ASPNETWebApplicationPublishPackageTokenizingParameters.aspx.
When I build a package on my local machine it transforms just fine, all transforms are good. But when I submit the job to the build server it doesn't work. I get multiple versions of the configs and they are not transformed. I've followed the instructions and included the dll and targets file in TFS, and even embeded it in my web project. I've pointed the project file to where the target file is: <SlowCheetahTargets Condition=" '$(SlowCheetahTargets)'=='' ">$(MSBuildProjectDirectory)\App_Data\SlowCheetah.Transforms.targets</SlowCheetahTargets>
But I still seem to be using the transform file in my %appdata% directory - when I rename it I can't even preview the transform. Shouldn't it use the one defined in the project file and in TFS instead? If I am still using the .target in appdata then the build server is too...
Using TFS 2010, VS 2010, my build is building configurations "Any CPU|Ext.Prod", same as my workstation. I have nothing in my Build events.
Any ideas?
The only info I have regarding this is my blog post at <a href="http://sedodream.com/2011/12/12/SlowCheetahXMLTransformsFromACIServer.aspx">http://sedodream.com/2011/12/12/SlowCheetahXMLTransformsFromACIServer.aspx</a>. If you are still having issues try stackoverflow.com to see if a community member can help out.
I have the same issue. I've already set up my project exactly as laid out in the post by Sayed, but the build server still does not transform my config files. Using the local publishing from Visual Studio works fine, though.
If you take a look at the build log you should see if the .targets file is getting imported or not. I am guessing that the file is not being imported. Could you take a look and let me know if you are able to determine that?
You are right. The .targets file is not even being referenced. My path to the targets file was not correct. Anyway, once I've got that fixed, I found one more issue. When I access the source files in my TFS Build server (_PublishedWebsites\ProjectName), the config files are NOT transformed. However, they are transformed within the packages (_PublishedWebsites\ProjectName_Package). Is there any way to correct this?
So, apparently my transforms may have been working the whole time on the build server. I was looking at the configs in the _PublishedWebsites build directory, seeing that they were not transformed. It didn't occur to me that the zipped package might contain different configuration values than the unzipped directory! (Thanks deweaver!)
Also, my server build log does not contain references to ".targets" or "SlowCheetah" anywhere.
Everyone needs to check the config files deep inside of the zipped Project_Package file to tell if the transform worked on the build server.
I will now re-assess our use of this tool (I had given up on it). Certainly fixing it to do the transforms in both build directories would make it much more useful.
My environment is VS 2010 Ultimate. I have a web app with 2 xml files - web.config and a metadata file for use with Indentity Framework. I have 3 build configurations set up.
FYI - I took the lazt way out on the transforms. Rather than including only the deltas in the transform file, I am doing a complete REPLACE action in the first node of the files.
I set up the web.config for Transform first, populated the transform files. The transform for the web.config works.
The metadata file is a different story. Right after the Add Transform step I knew something was up. This is the first line of the original file before the Add Transform:
<EntityDescriptor ID="_86192c4f-2aaa-43de-aec5-705f61278051" entityID="http://localhost/myapp/" xmlns="urn:oasis:names:tc:SAML:2.0:metadata"></EntityDescriptor>
Here's the first line of one of the transform files right after the Add Transform:
<EntityDescriptor xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" xmlns="urn:oasis:names:tc:SAML:2.0:metadata"></EntityDescriptor>
As you can see several attributes are missing. I can add those back and everything is good. However, in this transform file the REPLACE action needs to be on the EntityDescriptor line. If I add the REPLACE transform action:
<EntityDescriptor xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" xdt:Transform="Replace" ID="_86192c4f-2aaa-43de-aec5-705f61278051" entityID="http://localhost/SavaSecurity/" xmlns="urn:oasis:names:tc:SAML:2.0:metadata"></EntityDescriptor>
and try to preview it I get an error dialog "There was an error processing the transformation".
Not sure where to go from here. Am wondering whether the additional attributes on that line are causing a problem.
Your help will be appreciated......
Hello
I am using visual studio 2012 for a web-project and have tried slow cheeta to transform the different enviroment configurations. It works fine, but the estethics of the config-files are changed, like this:
Before (XML is split onto rows for readability in our configs)-
<site description="Example Site" siteId="some ID" licenseFilePath="drive\License.config">
<siteSettings enableScheduler="true" stringCompressionThreshold="0"
stringDelayedLoadThreshold="0" remoteWebServiceCulture="0" indexingDelayAfterPublish="00:00:20"...
After transform (extra blank rows are inserted into the config):
<site description="Example Site (new)" siteId="some other ID" licenseFilePath="drive\License.config">
<siteSettings enableScheduler="true" stringCompressionThreshold="0" stringDelayedLoadThreshold="0" remoteWebServiceCulture="0"
indexingDelayAfterPublish="00:00:20"...
The configs still work since they are XML and have to "loose" value tags, but they look like crap and are hard to read if someone has to use notepad on a deploy server.
I am unsure if this is an issue with slow cheeta or vs 2012 in general. Anyone got a pointer what I might have done wrong or where I can look for a workaround if this is an issue with slow cheeta or VS 2012?
/Torbjörn