在我的解决方案中,有些项目有最后需要运行的任务,比如将文件复制到各个地方。我们通过以下方式实现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 认为只要主要的“构建”目标通过,一切也都通过了。
我们的解决方法 - 将目标更改为BeforeTargets="AfterBuild"
,这将我的目标置于 Build 目标中。但是,这需要了解“构建”目标的内容,并且可能不适用于其他项目类型。
问题:
- 有没有办法让
AfterTargets="Build"
解决方案构建失败? - 如果没有,有没有办法自动验证人们没有添加
AfterTargets="Build"
到他们的项目中?