6

在我的解决方案中,有些项目有最后需要运行的任务,比如将文件复制到各个地方。我们通过以下方式实现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 目标中。但是,这需要了解“构建”目标的内容,并且可能不适用于其他项目类型。

问题:

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

1 回答 1

0

如果 Source 和 Destination 的内容不同,您是否尝试在 <Copy /> 任务之后添加 <Error /> 以引发错误?

于 2013-05-17T03:38:28.713 回答