Поделиться через


Игнорирование ошибок в задачах

Иногда требуется, чтобы сборка была отказоустойчивой при выполнении определенных задач. В случае появления ошибки в таких некритических задачах сборку можно продолжить, поскольку это не помешает получить требуемый результат. Например, если в проекте используется задача 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>