Slow Cheetah AfterTargets = "TransformAllFiles"在本地工作,而不是在构建服务器上工作



我正在使用Slow Cheetah转换app.config文件为控制台应用程序。在构建期间,我还调用了这个应用程序。最初我使用构建后事件,但后来我意识到Slow Cheetah转换在构建后事件之后运行,所以我使用了如下所述的解决方案:

SlowCheetah在post-build事件后执行

所以基本上,在我的Migrations项目中,我有以下部分(Echo/Type for diagnostics)

<Target Name="AfterBuild" AfterTargets="TransformAllFiles">
    <Exec Command="Echo $(OutputPath)" />
    <Exec Command="Type $(OutputPath)Migrations.exe.config" />
    <Exec Command="$(OutputPath)Migrations.exe" />
</Target>

这在本地工作得很好。然而,当部署到CI服务器(CruiseControl + MSBuild 4.0)时,我观察到奇怪的行为。这些任务现在运行在"慢猎豹"之前。为了验证,我输入配置文件,我可以看到它没有被转换。然而,一旦构建完成,我去构建框,我看到已经转换的文件在同一位置。

所以缓慢的猎豹正在做它的工作,但由于某些原因,这些任务运行后。有什么建议可以解决这个问题吗?

好了,我想明白了。结果,它在本地也不起作用。只是在VS 2010 IDE中,我没有每次都运行干净构建,所以它会拾取已经转换的文件。

为了解决它,我最终运行MSBuild命令行,当我这样做时,我注意到最后一个目标运行是ScReplaceAppConfigItem。我试图使用AfterTargets来强制我的任务运行后,但它没有帮助。我的任务还在运行。

是什么使它工作,实际上是使用旧的DependsOnTargets属性:

<Target Name="AfterBuild" DependsOnTargets="ScReplaceAppConfigItem">
  <Exec Command="Echo $(OutputPath)" />
  <Exec Command="Type $(OutputPath)Migrations.exe.config" />
  <Exec Command="$(OutputPath)Migrations.exe" />
</Target>

最新更新