Compartilhar via


Ordem de compilação de destinos

Destinos devem ser ordenados se a entrada a um destino depende de saída de outro destino. Você pode usar esses atributos para especificar a ordem em que os destinos são executados:

  • InitialTargets. Esse atributo de Project especifica os destinos que terão primeiro, mesmo se os destinos são especificados na linha de comando ou no atributo de DefaultTargets .

  • DefaultTargets. Este atttribute de Project especifica que os destinos são executados se um destino não é especificado explicitamente na linha de comando.

  • DependsOnTargets. Esse atributo de Target especifica os destinos que devem executar antes que esse destino pode executar.

  • BeforeTargets e AfterTargets. Esses atributos de Target especifica que este destino deve executar antes ou depois de destinos específicos (MSBuild 4,0).

Um destino é executado nunca duas vezes durante uma compilação, mesmo se um destino na compilação subsequente depende dele. Um destino foi executado uma vez, a contribuição para a compilação concluída.

Destinos podem ter um atributo de Condition . Se a condição especificada for avaliada como false, o destino não é executado e não tem efeito na compilação. Para obter mais informações sobre as circunstâncias, consulte Condições do MSBuild.

Destinos rubrique

O atributo de InitialTargets do elemento de Projeto especifica os destinos que terão primeiro, mesmo se os destinos são especificados na linha de comando ou no atributo de DefaultTargets . Destinos iniciais são normalmente usados para verificação de erros.

O valor do atributo de InitialTargets pode ser uma lista delimitada por ponto-e-vírgula, ordenada de destino. O exemplo a seguir especifica que o destino de Warm executa, e o destino de Eject executa.

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

Os projetos importados podem ter seus próprios atributos de InitialTargets . Todos os destinos iniciais são agregados juntos e execução em ordem.

Para obter mais informações, consulte Como especificar o destino a ser compilado primeiro.

Destinos de opção

O atributo de DefaultTargets do elemento de Projeto especifica que direcionam ou destinos são compilados se um destino não é especificado explicitamente na linha de comando.

O valor do atributo de DefaultTargets pode ser uma lista delimitada por ponto-e-vírgula, ordenada de destinos padrão. O exemplo a seguir especifica que o destino de Clean executa, e o destino de Build executa.

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

Você pode substituir destinos padrão usando a opção de /target na linha de comando. O exemplo a seguir especifica que o destino de Build executa, e o destino de Report executa. Quando você especifica destinos dessa maneira, todos os destinos padrão são ignorados.

msbuild /target:Build;Report

Se os destinos de inicial e destinos padrão são especificados, e se nenhum destino de linha de comando é especificado, MSBuild executa destinos iniciais primeiro em seguida, executa destinos padrão.

Os projetos importados podem ter seus próprios atributos de DefaultTargets . O primeiro atributo de DefaultTargets localizado determina que alvos de opção serão executados.

Para obter mais informações, consulte Como especificar o destino a ser compilado primeiro.

Primeiro destino

Se não houver nenhum destino de inicial, alvos de opção, ou alvos de linha de comando, então é executado do MSBuild o primeiro destino que encontra no arquivo de projeto ou em todos os arquivos de projeto importados.

Dependências de destino

Destinos podem descrever relações de dependência entre si. O atributo de DependsOnTargets indica que um destino depende de outro destino. Por exemplo,

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

instrui o MSBuild que o destino de Serve depende de destino de Chop e de destino de Cook . MSBuild executa o destino de Chop em seguida, executa o destino de Cook antes de executar o destino de Serve .

Antes de destinos e depois destinos

Em MSBuild 4,0, você pode especificar ordem de destino usando os atributos de BeforeTargets e de AfterTargets .

Considere o seguinte script.

<Project DefaultTargets="Compile;Link" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="Compile">
        <Message Text="Compiling" />
    </Target>
    <Target Name="Link">
        <Message Text="Linking" />
    </Target>
</Project>

Para criar um destino intermediário Optimize que é executado após o destino de Compile , mas antes que o destino de Link , adicione o seguinte destino em qualquer lugar no elemento de Project .

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

Determinando a ordem de compilação de destino

MSBuild determina a ordem de compilação de destino como segue:

  1. destinos deInitialTargets são executados.

  2. Destinos especificados na linha de comando pelo opção de /target são executados. Se você não especificar nenhum destino na linha de comando, então os destinos de DefaultTargets são executados. Se nenhum estiver presente, então o primeiro destino localizado é executado.

  3. O atributo de Condition de destino é avaliado. Se o atributo de Condition estiver presente e avalia a false, o destino não é executado e não tem efeito adicional na compilação.

  4. Antes que um destino é executado, os seus alvos de DependsOnTargets são executados.

  5. Antes que um destino é executado, qualquer destino que listas em um atributo de BeforeTargets é executado.

  6. Antes que um destino é executado, o atributo de Inputs e o atributo de Outputs são comparados. Se MSBuild determina que todos os arquivos de saída são expirado em relação ao arquivo de entrada correspondente ou arquivos, então MSBuild executa o destino. Se não, MSBuild ignora o destino.

  7. Depois que um destino é executado ou saltado, qualquer destino que listas em um atributo de AfterTargets é executado.

Consulte também

Conceitos

Destinos do MSBuild