6
在我的解决方案中,某些项目的任务需要在最后运行,例如将文件复制到各个位置。我们实施与AfterTargets="Build"
:AfterTargets失败不会失败msbuild运行
<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"
,这会将我的目标放入生成目标中。但是,这需要知道“构建”目标的内容,并且可能不适用于其他项目类型。
问:
- 有没有办法让
AfterTargets="Build"
失败失败解决方案建立? - 如果没有,是否有办法自动验证人们没有将
AfterTargets="Build"
添加到他们的项目中?