2012-09-14 51 views
5

我使用SlowCheetah来转换我的app.configs。我有一个多项目解决方案,其中一个项目执行构建后事件,其中bin的输出被复制到别处。我发现SlowCheetah是在生成后事件之后进行转换的,因此我要复制的app.config是预转换版本。SlowCheetah在生成后事件后执行

有没有人有我如何在SlowCheetah转换后执行我的副本的建议?这是否需要我编写一个自定义生成任务?

+0

我找到了解决方法。这不是优雅,但它的作品。我创建了一个虚拟项目,并将其设置为依赖项,以在项目生成后生成事件之后进行构建。我将后期制作的复制事件从原始项目移到了这个新的虚拟项目中。这是可行的,因为SlowCheetah已经完成了它的工作。 – ScottC

回答

4

如果您使用msbuild 4.0来构建项目 - 您可以使用新的AfterTargets BeforeTargets属性来勾选slowcheetah目标。

我不知道究竟是什么目标,你希望以后挂钩的名字,但这个代码可以给你基地的概念如何做到这一点

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Target Name="Some_Target_Name" AfterTargets="TransformAllFiles" > 
      <Message Text="= Script here will run after SlowCheetah TransformAllFiles ="/> 
    </Target> 
<Project> 

编辑:我安装SlowCheetah,发现AfterTargets属性应该是“TransformAllFiles” 。 只需设置你的目标依赖AfterTargets="TransformAllFiles"

2

阿列克谢的回答导致了正确的解决方案,但在这里它是在充分:

  • 右键单击您的项目,并选择Unload Project
  • 现在右击该项目,选择Edit [your project name].csproj
  • 滚动至底部并取消命名AfterBuild目标,并添加此属性AfterTargets="TransformAllFiles"
  • 将您的文章建立一个使用exec命令行动纳入这一目标:

一个例子:

<Target Name="AfterBuild" AfterTargets="TransformAllFiles"> 
<Exec Command="ECHO Hello PostBuild World!" /> 
</Target> 
0

我也碰到了这个问题太...决定更新到SlowCheetah的最新版本(目前2.5.8),并且这个问题似乎已经修复!使用生成后事件来部署带有转换的XML的项目不会出现更多问题!

经过NuGet软件包升级过程后,我遇到了一个奇怪的问题,尽管......变换不再发生。编辑像Naeem Sarfraz这样的项目建议,我发现SlowCheetah的PropertyGroup部分放置在.csproj的末尾。

这只是将它移动到顶部,靠近其他PropertyGroup部分的问题,现在它就像一个魅力!

0

如果在发布之前需要复制/移动其他.config文件(除web.config以外),那么可以使用Visual Studio 2013完成它(我没有在早期版本上测试过) 。此部分可以在结束标记</Project >之前的.csproj文件末尾添加,并且在MSDeploy开始发布过程之前它将被解雇。

<Target Name="MoveConfigFile" BeforeTargets="MSDeployPublish"> 
    <Move 
     SourceFiles="$(IntermediateOutputPath)Package\PackageTmp\ThirdPartyApp.config" 
     DestinationFolder="$(IntermediateOutputPath)Package\PackageTmp\bin" 
     OverwriteReadOnlyFiles="true" 
    /> 
</Target> 

我所在的公司购买了需要有为了工作在bin文件夹用其组装沿着.config文件中的第三方产品的工作。

在我们需要处理产品的config文件,并能转化后,将其移动到bin文件夹同一时间。

$(IntermediateOutputPath)Package \ PackageTmp文件夹包含将被复制到目标服务器上的整个应用程序。