如何:忽略任务中的错误
有时您希望生成容忍特定任务中的错误。如果那些非关键任务失败,您希望生成继续,因为它仍可以产生所需的输出。例如,如果项目使用 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>