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

<Copy /> タスクの後に <Error /> を追加して、ソースと宛先の内容が同じでない場合にエラーをスローしようとしましたか?

于 2013-05-17T03:38:28.713 に答える