タスクで発生したエラーを無視する

ビルド時に一部のタスクのエラーを許容するとよい場合があります。 そのような重要でないタスクが失敗しても必要な出力は生成できるため、ビルドを続行させる場合です。 たとえば、各コンポーネントのビルド後にプロジェクトで SendMail タスクを使ってメール メッセージを送信する場合、メール サーバーが利用できず、ステータス メッセージを送信できなくても、完了までビルドを続行させるのは許容範囲と見なせる場合があります。 別の例として、通常、ビルド中に中間ファイルが削除される場合、それらのファイルを削除できなくても、完了までビルドを続行させるのは許容範囲と見なせる場合があります。

ContinueOnError 属性を使用する

Task 要素の ContinueOnError 属性は、タスク エラーの発生時にビルドを停止するか続行するかを制御します。 この属性は、ビルドを続行するときに、エラーをエラーとして扱うか、それとも警告として扱うかも制御します。

ContinueOnError 属性には、次の値のいずれかを含めることができます。

  • WarnAndContinue または true。 タスクが失敗すると、Target 要素の後続のタスクとビルドの実行が継続し、タスクのすべてのエラーが警告として扱われます。

  • ErrorAndContinue。 タスクが失敗すると、Target 要素の後続のタスクとビルドの実行が継続し、タスクのすべてのエラーがエラーとして扱われます。

  • ErrorAndStop または false (既定)。 タスクが失敗すると、Target 要素の残りのタスクとビルドは実行されず、Target 要素全体とビルドは失敗したと見なされます。

バージョン 4.5 より前の .NET Framework では、true 値と false 値のみがサポートされます。

ContinueOnError の既定値は ErrorAndStopです。 属性を ErrorAndStop に設定すると、プロジェクト ファイルを読むユーザーにとって動作は明確になります。

タスクのエラーを無視するには

タスクの ContinueOnError 属性を使用します。 たとえば次のような点です。

<Delete Files="@(Files)" ContinueOnError="WarnAndContinue"/>

次のコード例は、Delete タスクが失敗した場合でも Build ターゲットが実行され続け、ビルドが成功したと見なされることを示します。

<Project DefaultTargets="FakeBuild"
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
        <Files Include="*.obj"/>
    </ItemGroup>
    <Target Name="Clean">
        <Delete Files="@(Files)" ContinueOnError="WarnAndContinue"/>
    </Target>

    <Target Name="FakeBuild" DependsOnTargets="Clean">
        <Message Text="Building after cleaning..."/>
    </Target>
</Project>