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:
destinos deInitialTargets são executados.
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.
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.
Antes que um destino é executado, os seus alvos de DependsOnTargets são executados.
Antes que um destino é executado, qualquer destino que listas em um atributo de BeforeTargets é executado.
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.
Depois que um destino é executado ou saltado, qualquer destino que listas em um atributo de AfterTargets é executado.