忽略任务中的错误

有时你希望生成能够容忍某些任务中的错误。 如果这些非关键任务失败,你希望生成能够继续进行,因为它仍然可以产生所需的输出。 例如,如果一个项目在每个组件生成之后都使用 SendMail 任务发送电子邮件消息,那么即使邮件服务器变得不可用而导致状态邮件无法发送,但依然让生成继续完成,这一情况或许便是可以接受的。 或者,如果在生成过程中,中间文件通常会被删除,但即使无法删除这些文件,那么让生成继续完成也是可以接受的。

除了此处所述的特定于任务的方法外,还可以使用 MSBuild 的忽略警告常规方法,例如,通过使用属性 MSBuildWarningsAsMessages。 请参阅常用的 MSBuild 项目属性

使用 ContinueOnError 属性

Task 元素的 ContinueOnError 属性控制在发生任务失败时,是停止还是继续生成。 此属性还可以控制在生成继续操作时,错误被视为错误还是警告。

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

  • WarnAndContinuetrue。 当任务失败时,Target 元素中的后续任务和生成将继续执行,并且来自该任务的所有错误都被视为警告。

  • ErrorAndContinue。 当任务失败时,Target 元素中的后续任务和生成将继续执行,并且来自该任务的所有错误都被视为错误。

  • ErrorAndStopfalse(默认值)。 当任务失败时,将不会执行 Target 元素中的剩余任务和生成,并且整个 Target 元素和生成都被视为已失败。

4.5 之前的 .NET Framework 版本仅支持 truefalse 值。

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>