Ordre de génération des ciblesTarget Build Order

Les cibles doivent être classées si l’entrée d’une cible dépend de la sortie d’une autre.Targets must be ordered if the input to one target depends on the output of another target. Vous pouvez utiliser les attributs suivants pour spécifier l’ordre d’exécution des cibles :You can use these attributes to specify the order in which targets are run:

  • InitialTargets.InitialTargets. L’attribut Project spécifie les cibles qui sont exécutées en premier, même si des cibles sont spécifiées sur la ligne de commande ou dans l’attribut DefaultTargets.This Project attribute specifies the targets that will run first, even if targets are specified on the command line or in the DefaultTargets attribute.

  • DefaultTargets.DefaultTargets. Cet attribut Project spécifie les cibles qui sont exécutées si aucune cible n’est spécifiée explicitement sur la ligne de commande.This Project atttribute specifies which targets are run if a target is not specified explicitly on the command line.

  • DependsOnTargets.DependsOnTargets. Cet attribut Target spécifie les cibles qui doivent s’exécuter avant que cette cible puisse s’exécuter.This Target attribute specifies targets that must run before this target can run.

  • Voir BeforeTargets et AfterTargets.BeforeTargets and AfterTargets. Ces attributs Target indiquent que cette cible doit s’exécuter avant ou après les cibles spécifiées (MSBuild 4.0).These Target attributes specify that this target should run before or after the specified targets (MSBuild 4.0).

    Une cible n’est jamais exécutée deux fois pendant une génération, même si une cible suivante de la génération en dépend.A target is never run twice during a build, even if a subsequent target in the build depends on it. Une fois qu’une cible a été exécutée, sa contribution à la génération est terminée.Once a target has been run, its contribution to the build is complete.

    Les cibles peuvent posséder un attribut Condition.Targets may have a Condition attribute. Si la condition spécifiée a la valeur false, la cible n’est pas exécutée et n’a aucun effet sur la génération.If the specified condition evaluates to false, the target isn't executed and has no effect on the build. Pour plus d’informations sur les conditions, consultez l’article Conditions (Conditions MSBuild).For more information about conditions, see Conditions.

Cibles initialesInitial Targets

L’attribut InitialTargets de l’élément Project spécifie les cibles qui sont exécutées en premier, même si des cibles sont spécifiées sur la ligne de commande ou dans l’attribut DefaultTargets.The InitialTargets attribute of the Project element specifies targets that will run first, even if targets are specified on the command line or in the DefaultTargets attribute. En règle générale, les cibles initiales sont utilisées pour la vérification des erreurs.Initial targets are typically used for error checking.

La valeur de l’attribut InitialTargets peut être une liste ordonnée de cibles séparées par des points-virgules.The value of the InitialTargets attribute can be a semicolon-delimited, ordered list of targets. Dans l’exemple suivant, la cible Warm est exécutée avant la cible Eject.The following example specifies that the Warm target runs, and then the Eject target runs.

<Project InitialTargets="Warm;Eject" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  

Les projets importés peuvent posséder leurs propres attributs InitialTargets.Imported projects may have their own InitialTargets attributes. Toutes les cibles initiales sont agrégées et exécutées dans l’ordre.All initial targets are aggregated together and run in order.

Pour plus d’informations, consultez l’article Comment : spécifier la cible à générer en premier.For more information, see How to: Specify Which Target to Build First.

Cibles par défautDefault Targets

L’attribut DefaultTargets de l’élément Project spécifie la ou les cibles qui sont générées si aucune cible n’est spécifiée explicitement sur une ligne de commande.The DefaultTargets attribute of the Project element specifies which target or targets are built if a target isn't specified explicitly in a command line.

La valeur de l’attribut DefaultTargets peut être une liste ordonnée de cibles par défaut séparées par des points-virgules.The value of the DefaultTargets attribute can be a semicolon-delimited, ordered list of default targets. Dans l’exemple suivant, la cible Clean est exécutée avant la cible Build.The following example specifies that the Clean target runs, and then the Build target runs.

<Project DefaultTargets="Clean;Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  

Vous pouvez remplacer les cibles par défaut en utilisant le commutateur /target sur la ligne de commande.You can override the default targets by using the /target switch on the command line. Dans l’exemple suivant, la cible Build est exécutée avant la cible Report.The following example specifies that the Build target runs, and then the Report target runs. Si vous spécifiez des cibles de cette manière, les cibles par défaut sont ignorées.When you specify targets in this way, any default targets are ignored.

msbuild /target:Build;Report

Si des cibles initiales et des cibles par défaut sont spécifiées et si aucune cible de ligne de commande n’est indiquée, MSBuild exécute d’abord les cibles initiales, puis les cibles par défaut.If both initial targets and default targets are specified, and if no command-line targets are specified, MSBuild runs the initial targets first, and then runs the default targets.

Les projets importés peuvent posséder leurs propres attributs DefaultTargets.Imported projects may have their own DefaultTargets attributes. Le premier attribut DefaultTargets rencontré détermine les cibles par défaut qui s’exécuteront.The first DefaultTargets attribute encountered determines which default targets will run.

Pour plus d’informations, consultez l’article Comment : spécifier la cible à générer en premier.For more information, see How to: Specify Which Target to Build First.

Première cibleFirst Target

En l’absence de cibles initiales, cibles par défaut ou cibles de ligne de commande, MSBuild exécute la première cible qu’il rencontre dans le fichier projet ou dans les fichiers projet importés.If there are no initial targets, default targets, or command-line targets, then MSBuild runs the first target it encounters in the project file or any imported project files.

Dépendances de cibleTarget Dependencies

Les cibles peuvent décrire les relations de dépendance existant les unes avec les autres.Targets can describe dependency relationships with each other. L’attribut DependsOnTargets indique qu’une cible dépend d’autres cibles.The DependsOnTargets attribute indicates that a target depends on other targets. Par exemple :For example,

<Target Name="Serve" DependsOnTargets="Chop;Cook" />  

indique à MSBuild que la cible Serve dépend des cibles Chop et Cook.tells MSBuild that the Serve target depends on the Chop target and the Cook target. MSBuild exécute la cible Chop, puis la cible Cook, avant la cible Serve.MSBuild runs the Chop target, and then runs the Cook target before it runs the Serve target.

BeforeTargets et AfterTargetsBeforeTargets and After Targets

Dans MSBuild 4.0, vous pouvez spécifier l’ordre des cibles à l’aide des attributs BeforeTargets et AfterTargets.In MSBuild 4.0, you can specify target order by using the BeforeTargets and AfterTargets attributes.

Examinez le script ci-dessous.Consider the following script.

<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 intermédiaire Optimize s’exécutant après la cible Compile, mais avant la cible Link, ajoutez la cible suivante n’importe où dans l’élément Project.To create an intermediate target Optimize that runs after the Compile target, but before the Link target, add the following target anywhere in the Project element.

<Target Name="Optimize"   
    AfterTargets="Compile" BeforeTargets="Link">  
    <Message Text="Optimizing" />  
</Target>  

Détermination de l’ordre de génération des ciblesDetermining the Target Build Order

MSBuild détermine l’ordre de génération des cibles comme suit :MSBuild determines the target build order as follows:

  1. Les cibles InitialTargets sont exécutées.InitialTargets targets are run.

  2. Les cibles spécifiées sur la ligne de commande par le commutateur /target sont exécutées.Targets specified on the command line by the /target switch are run. Si vous n’indiquez aucune cible sur la ligne de commande, les cibles DefaultTargets sont alors exécutées.If you specify no targets on the command line, then the DefaultTargets targets are run. En l’absence de ces cibles, la première cible rencontrée est exécutée.If neither is present, then the first target encountered is run.

  3. L’attribut Condition de la cible est évalué.The Condition attribute of the target is evaluated. Si l’attribut Condition est indiqué et défini sur la valeur false, la cible n’est pas exécutée et n’a aucun effet sur la génération.If the Condition attribute is present and evaluates to false, the target isn't executed and has no further effect on the build.

    Les cibles qui listent la cible conditionnelle dans BeforeTargets ou AfterTargets s’exécutent toujours dans l’ordre indiquéTargets that list the conditional target in BeforeTargets or AfterTargets still execute in the prescribed order

  4. Avant l’exécution d’une cible, ses cibles DependsOnTargets sont exécutées.Before a target is executed, its DependsOnTargets targets are run.

  5. Avant l’exécution d’une cible, toute cible qui la répertorie dans un attribut BeforeTargets est exécutée.Before a target is executed, any target that lists it in a BeforeTargets attribute is run.

  6. Avant l’exécution d’une cible, ses attributs Inputs et Outputs sont comparés.Before a target is executed, its Inputs attribute and Outputs attribute are compared. Si MSBuild détermine que des fichiers de sortie sont obsolètes en ce qui concerne le ou les fichiers d’entrée correspondants, MSBuild exécute la cible.If MSBuild determines that any output files are out of date with respect to the corresponding input file or files, then MSBuild executes the target. Sinon, MSBuild ignore la cible.Otherwise, MSBuild skips the target.

  7. Une fois qu’une cible est exécutée ou ignorée, toute cible qui la répertorie dans un attribut AfterTargets est exécutée.After a target is executed or skipped, any target that lists it in an AfterTargets attribute is run.

Voir aussiSee Also

Targets (Cibles MSBuild)Targets