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"
添加到他們的項目中?