Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les cibles doivent être ordonnées si l’entrée à une cible dépend de la sortie d’une autre cible. Vous pouvez utiliser ces attributs pour spécifier l’ordre dans lequel les cibles sont exécutées :
InitialTargets
. CetProject
attribut spécifie les cibles qui s’exécutent en premier, même si les cibles sont spécifiées sur la ligne de commande ou dans l’attributDefaultTargets
.DefaultTargets
. CetProject
attribut spécifie les cibles exécutées si une cible n’est pas spécifiée explicitement sur la ligne de commande.DependsOnTargets
. CetTarget
attribut spécifie les cibles qui doivent s’exécuter avant que cette cible ne puisse s’exécuter.BeforeTargets
etAfterTargets
. CesTarget
attributs spécifient que cette cible doit s’exécuter avant ou après les cibles spécifiées.
En général, vous ne devez pas dépendre de l’ordre de déclaration pour spécifier les tâches exécutées avant d’autres tâches.
Une cible n’est jamais exécutée deux fois pendant une build, même si une cible ultérieure dans la build dépend de celle-ci. Une fois qu’une cible a été exécutée, sa contribution à la génération est terminée.
Les cibles peuvent avoir un Condition
attribut. Si la condition spécifiée est évaluée false
, la cible n’est pas exécutée et n’a aucun effet sur la build. Pour plus d’informations sur les conditions, consultez Conditions.
Cibles initiales
L’attribut InitialTargets
de l’élément Project spécifie les cibles qui s’exécutent en premier, même si les cibles sont spécifiées sur la ligne de commande ou dans l’attribut DefaultTargets
. Les cibles initiales sont généralement utilisées pour la vérification des erreurs.
La valeur de l’attribut InitialTargets
peut être une liste de cibles délimitées par des points-virgules et triées. L’exemple suivant spécifie que la cible Warm
s’exécute, puis que la cible Eject
s’exécute.
<Project InitialTargets="Warm;Eject" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
Les projets importés peuvent avoir leurs propres InitialTargets
attributs. Toutes les cibles initiales sont agrégées et exécutées dans l’ordre.
Pour plus d’informations, consultez Guide pratique pour spécifier la cible à générer en premier.
Cibles par défaut
L’attribut DefaultTargets
de l’élément Project spécifie la cible ou les cibles générées si une cible n’est pas spécifiée explicitement dans une ligne de commande.
La valeur de l’attribut DefaultTargets
peut être une liste ordonnée de cibles par défaut délimitées par des points-virgules. L’exemple suivant spécifie que la cible Clean
s’exécute, puis que la cible Build
s’exécute.
<Project DefaultTargets="Clean;Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
Vous pouvez remplacer les cibles par défaut à l’aide du commutateur -target sur la ligne de commande. L’exemple suivant spécifie que la cible Build
s’exécute, puis que la cible Report
s’exécute. Lorsque vous spécifiez des cibles de cette façon, toutes les cibles par défaut sont ignorées.
msbuild -target:Build;Report
Si les cibles initiales et les cibles par défaut sont spécifiées et si aucune cible de ligne de commande n’est spécifiée, MSBuild exécute d’abord les cibles initiales, puis exécute les cibles par défaut.
Les projets importés peuvent avoir leurs propres DefaultTargets
attributs. Le premier DefaultTargets
attribut rencontré détermine les cibles par défaut qui s’exécutent.
Pour plus d’informations, consultez Guide pratique pour spécifier la cible à générer en premier.
Première cible
S’il n’existe pas de cibles initiales, de cibles par défaut ou de cibles de ligne de commande, MSBuild exécute la première cible qu’il rencontre dans le fichier projet ou les fichiers projet importés.
Dépendances cibles
Les cibles peuvent décrire les relations de dépendance entre elles. L’attribut DependsOnTargets
indique qu’une cible dépend d’autres cibles. Par exemple,
<Target Name="Serve" DependsOnTargets="Chop;Cook" />
indique à MSBuild que la Serve
cible dépend de la Chop
cible et de la Cook
cible. MSBuild exécute la Chop
cible, puis exécute la Cook
cible avant d’exécuter la Serve
cible.
Remarque
Les cibles standard du Kit de développement logiciel (SDK) définissent un certain nombre de DependsOn
propriétés qui contiennent la liste des cibles qui sont des dépendances pour cette cible (par exemple, $(BuildDependsOn)
, $(CleanDependsOn)
etc.). Par exemple,
<Target Name="Build" DependsOnTargets="$(BuildDependsOn)">
Pour personnaliser un projet, vous pouvez remplacer les DependsOn
propriétés par des cibles personnalisées supplémentaires qui étendent le processus de génération, comme décrit dans Étendre le processus de génération Visual Studio.
BeforeTargets et AfterTargets
Vous pouvez spécifier l'ordre cible en utilisant les attributs BeforeTargets
et AfterTargets
.
Considérez le script suivant.
<Project DefaultTargets="Compile;Link" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Compile">
<Message Text="Compiling" />
</Target>
<Target Name="Link">
<Message Text="Linking" />
</Target>
</Project>
Pour créer une cible Optimize
intermédiaire qui s’exécute après la Compile
cible, mais avant la Link
cible, ajoutez la cible suivante n’importe où dans l’élément Project
.
<Target Name="Optimize" AfterTargets="Compile">
<Message Text="Optimizing" />
</Target>
Alternativement, spécifiez l'ordre comme
<Target Name="Optimize" BeforeTargets="Link">
<Message Text="Optimizing" />
</Target>
Il n’est pas utile de spécifier à la foisBeforeTargets
et AfterTargets
sur la même cible. Comme décrit dans la section suivante, seule la première cible rencontrée provoquera l’exécution de la nouvelle cible.
Déterminer l’ordre de construction cible
MSBuild détermine l’ordre de génération cible comme suit :
InitialTargets
les cibles sont exécutées.Les cibles spécifiées sur la ligne de commande par le commutateur -target sont exécutées. Si vous ne spécifiez aucune cible sur la ligne de commande, les
DefaultTargets
cibles sont exécutées. Si aucun des deux n’est présent, la première cible rencontrée est exécutée.L’attribut
Condition
de la cible est évalué. Si l’attributCondition
est présent et est évalué àfalse
, la cible n’est pas exécutée et n’a aucun effet supplémentaire sur la construction.Les autres cibles qui répertorient la cible conditionnelle dans
BeforeTargets
ouAfterTargets
s’exécutent toujours dans l’ordre prescrit, quel que soit le résultat de la condition.Avant l’exécution ou l’annulation de l’exécution de la cible, ses
DependsOnTargets
cibles sont exécutées, sauf si l’attributCondition
est appliqué à la cible et est évalué àfalse
.Remarque
Une cible est considérée comme ignorée si elle n’est pas exécutée car ses éléments de sortie sont up-to-date (voir compilation incrémentielle). Cette vérification est effectuée juste avant d’exécuter les tâches à l’intérieur de la cible et n’affecte pas l’ordre d’exécution des cibles.
Avant que la cible soit exécutée ou ignorée, toute autre cible qui répertorie la cible dans un
BeforeTargets
attribut est exécutée.Avant l'exécution de la cible, son attribut
Inputs
et son attributOutputs
sont comparés. Si MSBuild détermine que les fichiers de sortie sont obsolètes en ce qui concerne le fichier d’entrée ou les fichiers correspondants, MSBuild exécute la cible. Sinon, MSBuild ignore la cible.Une fois la cible exécutée ou ignorée, toute autre cible qui la répertorie dans un
AfterTargets
attribut est exécutée.
Contenu connexe
- Les cibles