AfterTargets失败不会导致msbuild运行失败

6

在我的解决方案中,一些项目有需要在最后运行的任务,比如将文件复制到不同的位置。我们使用 AfterTargets="Build" 实现这个功能:

<Target Name="CopyStuff" AfterTargets="Build">
    <Copy SourceFiles="..." DestinationFolder="..." />
</Target>

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

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

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

据我了解,这是因为 msbuild 认为只要主要的“Build”目标通过了,其他所有目标也都通过了。
我们的解决方法是将目标更改为 BeforeTargets="AfterBuild",这将把我的目标放入 Build 目标中。然而,这需要了解“Build”目标的内容,可能对其他项目类型无效。
问题:
  1. 有没有办法使 AfterTargets="Build" 失败会导致解决方案构建失败?
  2. 如果没有,有没有办法自动验证人们没有将 AfterTargets="Build" 添加到他们的项目中?
1个回答

0

你尝试在<Copy />任务之后添加一个<Error />来抛出错误,如果源和目标的内容不相同吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接