Игнорирование ошибок в задачах
Иногда требуется, чтобы сборка была отказоустойчивой при выполнении определенных задач. В случае появления ошибки в таких некритических задачах сборку можно продолжить, поскольку это не помешает получить требуемый результат. Например, если в проекте используется задача SendMail
для отправки сообщения электронной почты после сборки каждого компонента, вы можете пожелать продолжить сборку до полного завершения даже в том случае, если почтовые серверы оказываются недоступными и не удается отправить сообщения о состоянии. Или, например, если промежуточные файлы обычно удаляются во время сборки, вы можете пожелать продолжить выполнение сборки до полного завершения даже в том случае, если эти файлы не удается удалить.
Помимо описанных здесь методов, относящихся к задачам, можно также использовать общие способы пропуска предупреждений MSBuild, например с помощью свойства MSBuildWarningsAsMessages
. См . общие свойства проекта MSBuild.
Использование атрибута ContinueOnError
Атрибут ContinueOnError
элемента Task
определяет, следует ли остановить или продолжить сборку в случае, если в задаче произошла ошибка. Этот атрибут также контролирует, обрабатываются ли ошибки в виде ошибки или предупреждения, когда сборка продолжается.
Атрибут ContinueOnError
может содержать одно из следующих значений:
WarnAndContinue или true. При сбое задачи последующие задачи в элементе Target и сборке продолжают выполняться, а все ошибки из задачи рассматриваются как предупреждения.
ErrorAndContinue. При сбое задачи последующие задачи в элементе
Target
и сборке продолжают выполняться, а все ошибки из задачи рассматриваются как ошибки.ErrorAndStop или false (значение по умолчанию). При сбое задачи остальные задачи в элементе
Target
и сборке не выполняются, и считается, что возник сбой всего элементаTarget
и всей сборки.
Версии платформы .NET Framework, предшествовавшие 4.5, поддерживали только значения true
и false
.
Значение ContinueOnError
по умолчанию — ErrorAndStop
. Если задать для атрибута значение ErrorAndStop
, можно сделать такое поведение явным для всех объектов, считывающих файл проекта.
Игнорирование ошибки в задаче
Используйте атрибут ContinueOnError
задачи. Например:
<Delete Files="@(Files)" ContinueOnError="WarnAndContinue"/>
Пример
В следующем примере кода показано, что целевой объект Build
по-прежнему выполняется, а сборка считается успешной, даже если задача Delete
завершается с ошибкой.
<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>