首页 文章

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

提问于
浏览
1

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

SlowCheetah executes after post-build events

基本上,在我的迁移项目中,我有以下部分(用于诊断的Echo / Type)

<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 回答

  • 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>
    

相关问题