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