Ignorar erros em tarefas

Às vezes você deseja que um build seja tolerante a falhas em determinadas tarefas. Se essas tarefas não críticas falharem, você deseja que o build continue, pois ela ainda pode produzir a saída necessária. Por exemplo, se um projeto usa uma tarefa SendMail para enviar uma mensagem de email depois que cada componente é compilado, você pode considerar aceitável que o build prossiga até a conclusão, mesmo que os servidores de email não estejam disponíveis e as mensagens de status não possam ser enviadas. Ou, por exemplo, se arquivos intermediários são geralmente excluídos durante o build, você pode considerar aceitável que o build prossiga até a conclusão, mesmo que esses arquivos não possam ser excluídos.

Além dos métodos descritos aqui que são específicos para tarefas, você também pode usar as maneiras gerais do MSBuild de ignorar avisos, por exemplo, usando a propriedade MSBuildWarningsAsMessages. Consulte Propriedades de projeto comuns do MSBuild.

Usar o atributo ContinueOnError

O atributo ContinueOnError do elemento Task controla se um build é interrompida ou continua quando ocorre uma falha de tarefa. Esse atributo também controla se os erros são tratados como erros ou avisos quando o build continua.

O atributo ContinueOnError pode conter um dos seguintes valores:

  • WarnAndContinue ou true. Quando uma tarefa falha, as tarefas subsequentes no elemento de Destino e o build continuam em execução e todos os erros da tarefa são tratados como avisos.

  • ErrorAndContinue. Quando uma tarefa falha, as tarefas subsequentes no elemento de Target e o build continuam em execução e todos os erros da tarefa são tratados como erros.

  • ErrorAndStop ou false (padrão). Quando uma tarefa falha, as tarefas restantes do elemento de Target e o build não são executadas e todo o elemento de Target e o build são considerados como em falha.

As versões do .NET Framework antes da 4.5 ofereciam suporte somente aos valores true e false.

O valor padrão de ContinueOnError é ErrorAndStop. Se você definir o atributo como ErrorAndStop, tornará o comportamento explícito para qualquer pessoa que lê o arquivo de projeto.

Para ignorar um erro em uma tarefa

Use o atributo ContinueOnError da tarefa. Por exemplo:

<Delete Files="@(Files)" ContinueOnError="WarnAndContinue"/>

Exemplo

O exemplo de código a seguir ilustra que o destino de Build ainda é executado e o build é considerada um sucesso, mesmo se a tarefa Delete falhar.

<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>