2012-08-01 205 views
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",这会将我的目标放入生成目标中。但是,这需要知道“构建”目标的内容,并且可能不适用于其他项目类型。

问:

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

回答

0

你试过添加<错误/ >的<复制/ >任务之后,如果源和目标的内容是不一样抛出一个错误?