2012-08-01 260 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

你試過添加<錯誤/ >的<複製/ >任務之後,如果源和目標的內容是不一樣拋出一個錯誤?