Ignorer des erreurs dans des tâches

Vous souhaiterez parfois qu’une génération soit à tolérance de panne dans certaines tâches. En cas d’échec de ces tâches non critiques, vous souhaiterez continuer la génération, car elle peut toujours produire la sortie requise. Par exemple, si un projet utilise une tâche SendMail pour envoyer un message électronique après la génération de chaque composant, vous pouvez juger acceptable de poursuivre la génération jusqu’à son achèvement, même si les serveurs de messagerie ne sont pas disponibles et que les messages d’état ne peuvent pas être envoyés. Si des fichiers intermédiaires sont habituellement supprimés pendant la génération, vous pouvez également estimer que la génération peut se poursuivre jusqu’à son achèvement, même si ces fichiers ne peuvent pas être supprimés.

Outre les méthodes décrites ici qui sont spécifiques aux tâches, vous pouvez également utiliser les méthodes générales de MSBuild pour ignorer les avertissements, par exemple avec la propriété MSBuildWarningsAsMessages. Consultez Propriétés communes des projets MSBuild.

Utiliser l’attribut ContinueOnError

L’attribut ContinueOnError de l’élément Task contrôle si une génération s’arrête ou se poursuit en cas d’échec d’une tâche. Cet attribut détermine également si les erreurs sont considérées comme des erreurs ou des avertissements si la génération se poursuit.

L’attribut ContinueOnError peut contenir l’une des valeurs suivantes :

  • WarnAndContinue ou true. En cas d’échec d’une tâche, l’exécution des tâches suivantes de l’élément Target et de la génération se poursuit, et toutes les erreurs de la tâche sont considérées comme des avertissements.

  • ErrorAndContinue. En cas d’échec d’une tâche, l’exécution des tâches suivantes de l’élément Target et de la génération se poursuit, et toutes les erreurs de la tâche sont considérées comme des erreurs.

  • ErrorAndStop ou false (par défaut). En cas d’échec d’une tâche, les tâches restantes de l’élément Target et de la génération ne sont pas exécutées, et tout l’élément Target ainsi que la génération sont considérés comme étant en échec.

Les versions de .NET Framework antérieures à 4.5 prenaient en charge uniquement les valeurs true et false.

La valeur par défaut de ContinueOnError est ErrorAndStop. Si vous définissez l’attribut sur ErrorAndStop, vous rendez le comportement explicite pour tout lecteur du fichier projet.

Pour ignorer une erreur dans une tâche

Utilisez l’attribut ContinueOnError de la tâche. Par exemple :

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

Exemple

L’exemple de code suivant montre que la cible Build continue de s’exécuter, et la génération est considérée comme un succès, même en cas d’échec de la tâche 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>