如何:忽略任务中的错误

有时您希望生成容忍特定任务中的错误。如果那些非关键任务失败,您希望生成继续,因为它仍可以产生所需的输出。例如,如果项目使用 SendMail 任务在生成每个组件后发送电子邮件,即使邮件服务器不可用因而无法发送状态消息时,您也可以考虑接受让生成继续完成。或者,假如在生成期间通常删除中间文件,即使无法删除那些文件时,您也可以考虑接受让生成继续完成。

使用 ContinueOnError 特性

Task 元素的 ContinueOnError 特性控制着,当发生任务失败时,生成是停止还是继续。此特性控制错误是否视为错误或警告,在生成继续。

ContinueOnError 属性可以包含下列值之一:

  • WarnAndContinue。当任务失败时,在 目标 元素和生成的后续任务继续执行,因此,从任务的所有错误视为警告。

  • ErrorAndContinue。当任务失败时,在 Target 元素和生成的后续任务继续执行,因此,从任务的所有错误视为错误。

  • ErrorAndStop (默认值)。当任务失败时,在 Target 元素和生成的余下的任务,不会执行,整个 Target 元素和编译考虑失败。

.NET Framework 的版本在 4.5 版之前的仅支持 true 和 false 值。

ContinueOnError 的默认值为 ErrorAndStop。如果将特性设置为 ErrorAndStop,可使该行为显式可以读取项目文件的人。

忽略任务中的错误

  • 使用任务的 ContinueOnError 特性。例如:

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

示例

下面的代码示例阐释了即使 Delete 任务失败,Build 目标仍会运行并且生成被认为是成功的。

<Project DefaultTargets="FakeBuild"
    xmlns="https://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>

请参见

概念

MSBuild 任务

其他资源

MSBuild

MSBuild 任务参考