Orden de compilación de destinosTarget build order

Los destinos se deben ordenar si la entrada a un destino depende de la salida de otro destino.Targets must be ordered if the input to one target depends on the output of another target. Puede usar estos atributos para especificar el orden en el que se ejecutan los destinos:You can use these attributes to specify the order in which targets are run:

  • InitialTargets.InitialTargets. Este atributo Project especifica los destinos que se ejecutarán en primer lugar, incluso si los destinos se especifican en la línea de comandos o en el atributo 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. Este atributo Project especifica qué destinos se ejecutan si un destino no se especifica explícitamente en la línea de comandos.This Project attribute specifies which targets are run if a target is not specified explicitly on the command line.

  • DependsOnTargets.DependsOnTargets. Este atributo Target especifica los destinos que se deben ejecutar antes de poder ejecutar este destino.This Target attribute specifies targets that must run before this target can run.

  • BeforeTargets y AfterTargets.BeforeTargets and AfterTargets. Estos atributos Target especifican que este destino se debe ejecutar antes o después de los destinos especificados (MSBuild 4.0).These Target attributes specify that this target should run before or after the specified targets (MSBuild 4.0).

Un destino nunca se ejecuta dos veces durante una compilación, incluso si un destino subsiguiente en la compilación depende de él.A target is never run twice during a build, even if a subsequent target in the build depends on it. Una vez que se ha ejecutado un destino, su contribución a la compilación finaliza.Once a target has been run, its contribution to the build is complete.

Los destinos pueden tener un atributo Condition.Targets may have a Condition attribute. Si la condición especificada se evalúa como false, el destino no se ejecuta y no tiene ningún efecto en la compilación.If the specified condition evaluates to false, the target isn't executed and has no effect on the build. Para obtener más información sobre las condiciones, consulte Condiciones.For more information about conditions, see Conditions.

Destinos inicialesInitial targets

El atributo InitialTargets del elemento Project especifica los destinos que se ejecutarán en primer lugar, incluso si los destinos se especifican en la línea de comandos o en el atributo 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. Los destinos iniciales se utilizan normalmente para la comprobación de errores.Initial targets are typically used for error checking.

El valor del atributo InitialTargets puede ser una lista delimitada por punto y coma, y ordenada de destinos.The value of the InitialTargets attribute can be a semicolon-delimited, ordered list of targets. En el ejemplo siguiente se especifica que el destino Warm se ejecuta y, a continuación, se ejecuta el destino 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">

Los proyectos importados pueden tener sus propios atributos InitialTargets.Imported projects may have their own InitialTargets attributes. Todos los destinos iniciales se agregan conjuntamente y se ejecutan en orden.All initial targets are aggregated together and run in order.

Para más información, consulte Cómo: Especificar qué destino utilizar primero al compilar.For more information, see How to: Specify which target to build first.

Destinos predeterminadosDefault targets

El atributo DefaultTargets del elemento Project especifica qué destinos se compilan si un destino no se especifica explícitamente en la línea de comandos.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.

El valor del atributo DefaultTargets puede ser una lista delimitada por punto y coma, y ordenada de destinos predeterminados.The value of the DefaultTargets attribute can be a semicolon-delimited, ordered list of default targets. En el ejemplo siguiente se especifica que el destino Clean se ejecuta y, a continuación, se ejecuta el destino 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">

Puede invalidar los destinos predeterminados mediante el modificador -target en la línea de comandos.You can override the default targets by using the -target switch on the command line. En el ejemplo siguiente se especifica que el destino Build se ejecuta y, a continuación, se ejecuta el destino Report.The following example specifies that the Build target runs, and then the Report target runs. Al especificar los destinos de esta manera, los destinos predeterminados se omiten.When you specify targets in this way, any default targets are ignored.

msbuild -target:Build;Report

Si se especifican tanto destinos iniciales como destinos predeterminados y si no se especifica ningún destino de línea de comandos, MSBuild ejecuta los objetivos iniciales primero y, a continuación, ejecuta los destinos predeterminados.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.

Los proyectos importados pueden tener sus propios atributos DefaultTargets.Imported projects may have their own DefaultTargets attributes. El primer atributo DefaultTargets encontrado determina qué destinos predeterminados se ejecutarán.The first DefaultTargets attribute encountered determines which default targets will run.

Para más información, consulte Cómo: Especificar qué destino utilizar primero al compilar.For more information, see How to: Specify which target to build first.

Primer destinoFirst target

Si no hay destinos iniciales, destinos predeterminados ni destinos de línea de comandos, MSBuild ejecuta el primer destino que encuentra en el archivo del proyecto o en cualquier archivo del proyecto importado.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.

Dependencias de destinoTarget dependencies

Los destinos pueden describir relaciones de dependencia entre sí.Targets can describe dependency relationships with each other. El atributo DependsOnTargets indica que un destino depende de otros destinos.The DependsOnTargets attribute indicates that a target depends on other targets. Por ejemplo,For example,

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

indica a MSBuild que el destino Serve depende de los destinos Chop y Cook.tells MSBuild that the Serve target depends on the Chop target and the Cook target. MSBuild ejecuta el destino Chop y, a continuación, ejecuta el destino Cook antes de ejecutar el destino Serve.MSBuild runs the Chop target, and then runs the Cook target before it runs the Serve target.

BeforeTargets y AfterTargetsBeforeTargets and AfterTargets

En MSBuild 4.0, puede especificar el orden de los destinos mediante los atributos BeforeTargets y AfterTargets.In MSBuild 4.0, you can specify target order by using the BeforeTargets and AfterTargets attributes.

Considere el script siguiente.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>

Para crear un destino intermedio Optimize que se ejecuta después del destino Compile, pero antes del destino Link, agregue el destino siguiente en cualquier lugar en el elemento 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>

Determinación del orden de compilación de destinoDetermine the target build order

MSBuild determina el orden de compilación de destinos como sigue:MSBuild determines the target build order as follows:

  1. Se ejecutan los destinos InitialTargets.InitialTargets targets are run.

  2. Se ejecutan los destinos especificados en la línea de comandos mediante el modificador -target.Targets specified on the command line by the -target switch are run. Si no se especifica ningún destino en la línea de comandos, se ejecutan los destinos DefaultTargets.If you specify no targets on the command line, then the DefaultTargets targets are run. Si ninguno está presente, se ejecuta el primer destino que se encuentre.If neither is present, then the first target encountered is run.

  3. Se evalúa el atributo de destino Condition.The Condition attribute of the target is evaluated. Si el atributo Condition está presente y se evalúa como false, el destino no se ejecuta y no tiene ningún efecto adicional en la compilación.If the Condition attribute is present and evaluates to false, the target isn't executed and has no further effect on the build.

    Los otros destinos que enumeran el destino condicional en BeforeTargets o AfterTargets se siguen ejecutando en el orden prescrito.Other targets that list the conditional target in BeforeTargets or AfterTargets still execute in the prescribed order.

  4. Antes de ejecutar u omitir el destino, se ejecutan sus destinos de DependsOnTargets, a menos que el atributo Condition se aplique al destino y se evalúe como false.Before the target is executed or skipped, its DependsOnTargets targets are run, unless the Condition attribute is applied to the target and evaluates to false.

    Nota

    Se considera que se omite un destino si este no se ejecuta porque sus elementos de salida están actualizados (vea la compilación incremental).A target is considered skipped if it is not executed because its output items are up-to-date (see incremental build). Esta comprobación se lleva a cabo justo antes de ejecutar las tareas dentro del destino y no afecta al orden de ejecución de los destinos.This check is done just before executing the tasks inside target, and does not affect the order of execution of targets.

  5. Después de ejecutar u omitir el destino, se ejecuta cualquier otro destino que lo muestre en un atributo BeforeTargets.Before the target is executed or skipped, any other target that lists the target in a BeforeTargets attribute is run.

  6. Antes de ejecutar el destino, se comparan los atributos Inputs y Outputs.Before the target is executed, its Inputs attribute and Outputs attribute are compared. Si MSBuild determina que los archivos de salida no están actualizados con respecto a los archivos de entrada correspondientes, MSBuild ejecuta el destino.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. De lo contrario, MSBuild omite el destino.Otherwise, MSBuild skips the target.

  7. Después de ejecutar u omitir el destino, se ejecuta cualquier destino que lo enumere en un atributo AfterTargets.After the target is executed or skipped, any other target that lists it in an AfterTargets attribute is run.

Vea tambiénSee also