Slow Cheetah AfterTargets =“TransformAllFiles”在本地运行,而不是在构建服务器上运行

时间:2013-04-15 21:04:01

标签: .net cruisecontrol.net msbuild-4.0 slowcheetah

我正在使用Slow Cheetah转换app.config文件以获取控制台应用。 在构建期间,我也调用此应用程序。最初我使用了post-build事件,但后来我意识到Slow Cheetah变换后构建事件后运行,所以我使用了解决方案,如下所示:

SlowCheetah executes after post-build events

所以基本上,在我的迁移项目中,我有以下部分(用于诊断的回声/类型)

<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)时,我观察到奇怪的行为。这些任务现在在“慢速猎豹”之前运行。要验证我'输入'配置文件,我可以看到它没有被转换。但是一旦构建完成并且我去构建框,我在同一位置看到已经转换的文件。

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

1 个答案:

答案 0 :(得分:3)

好的,我明白了。事实证明,它也没有在本地工作。它只是在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>