【问题标题】:Slow Cheetah AfterTargets="TransformAllFiles" works locally, not on build serverSlow Cheetah AfterTargets="TransformAllFiles" 在本地工作,而不是在构建服务器上
【发布时间】:2013-04-08 03:02:03
【问题描述】:

我正在使用 Slow Cheetah 为控制台应用程序转换 app.config 文件。 在构建期间,我还调用此应用程序。最初我使用构建后事件,但后来我意识到 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)时,我观察到奇怪的行为。这些任务现在“在”Slow Cheetah 之前运行。为了验证我“输入”配置文件,我可以看到它没有被转换。但是,一旦构建完成并进入构建框,我会在同一位置看到已转换的文件。

所以,Slow Cheetah 正在完成它的工作,但在这些任务运行之后出于某种原因。 有什么建议可以解决吗?

【问题讨论】:

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


    【解决方案1】:

    好的,所以我想通了。事实证明,它在本地也不起作用。它只是在 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>
    

    【讨论】:

      猜你喜欢
      • 2020-08-14
      • 1970-01-01
      • 1970-01-01
      • 2021-10-12
      • 1970-01-01
      • 2011-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多