我正在使用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>