1

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

SlowCheetah 在构建后事件后执行

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

<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 正在完成其工作,但出于某种原因,这些任务运行后。有什么建议可以解决吗?

4

1 回答 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>
于 2013-04-16T21:43:51.383 回答