AfterTargets失败不会使msbuild运行失败

时间:2012-08-01 09:19:40

标签: msbuild

在我的解决方案中,某些项目需要在最后运行的任务,例如将文件复制到各个地方。我们使用AfterTargets="Build"

实现了这一点
<Target Name="CopyStuff" AfterTargets="Build">
    <Copy SourceFiles="..." DestinationFolder="..." />
</Target>

如果有效。但是,在构建解决方案(而不是单个项目!)时,如果复制失败,我们会收到红色构建警告,但msbuild(以及因此TFS构建)成功:

> msbuild /t:clean;build my.sln
(...)
(in red...) error MSB3021: Unable to copy file (...)

> echo %errorlevel%
0     <<<<<<< This means succeeded

根据我的理解,那是因为msbuild认为只要主修&#34; Build&#34;目标通过,一切都过去了。

我们的解决方法 - 将目标更改为BeforeTargets="AfterBuild",这会将我的目标置于Build目标中。但是,这需要了解&#34; Build&#34;目标,可能不适用于其他项目类型。

问题:

  1. 有没有办法让AfterTargets="Build"失败使解决方案构建失败?
  2. 如果没有,有没有办法自动验证人们没有将AfterTargets="Build"添加到他们的项目中?

1 个答案:

答案 0 :(得分:0)

您是否尝试过添加&lt;错误/&gt;在&lt; Copy /&gt;之后如果源和目标的内容不相同,则抛出错误的任务?