Практическое руководство. Игнорирование ошибок в задачах
Иногда требуется, чтобы построение было отказоустойчивым в определенных задачах.В случае появления ошибки в таких некритических задачах построение можно продолжить, поскольку это не помешает получить требуемый результат.Например, если в проекте используется задача SendMail для отправки сообщения электронной почты после сборки каждого компонента, вы можете пожелать продолжить построение до полного завершения даже в том случае, если почтовые серверы оказываются недоступными и сообщения о состоянии отправить не удается.Или, например, если промежуточные файлы обычно удаляются во время построения, вы можете пожелать продолжить выполнение построения до полного завершения даже в том случае, если эти файлы удалить не удается.
Использование атрибута ContinueOnError
Атрибут ContinueOnError элемента Task определяет, следует ли остановить или продолжить построение в случае, если в задаче произошла ошибка.Этот атрибут также контролирует, обрабатываются ли ошибки в виде ошибки или предупреждения, когда построение продолжается.
Атрибут ContinueOnError может содержать одно из следующих значений:
WarnAndContinue или true.При сбое задачи, последующие задачи в элементе целевой объект и построении продолжают выполняться, и все ошибки из задачи рассматриваются как предупреждения.
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="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>