Udostępnij za pośrednictwem


Kolejność kompilowania obiektów docelowych

Obiekty docelowe są zamawiane, jeśli dane wejściowe do jednego celu zależy od danych wyjściowych innego obiektu docelowego.Aby określić kolejność uruchamiania obiektów docelowych, można użyć tych atrybutów:

  • InitialTargets.To Project atrybut określa cele, które będą uruchamiane po raz pierwszy, nawet jeśli obiekty docelowe są określone w wierszu polecenia lub w DefaultTargets atrybut.

  • DefaultTargets.To Project atttribute Określa, które obiekty docelowe są uruchamiane Jeśli element docelowy nie jest jawnie określony w wierszu polecenia.

  • DependsOnTargets.To Target atrybut określa cele, które należy uruchomić przed cel ten można uruchomić.

  • BeforeTargets i AfterTargets.Te Target atrybuty określają, że cel ten ma być uruchomione przed lub po sprecyzowanych celów (MSBuild 4.0).

Element docelowy nie jest uruchomiony dwa razy podczas kompilacji, nawet jeżeli późniejsze miejsce docelowe w kompilacji zależy od tego.Po uruchomieniu tarczę swój wkład do kompilacji zostało ukończone.

Obiekty docelowe może mieć Condition atrybut.Jeśli określony warunek ma false, obiekt docelowy nie jest wykonywany i nie ma wpływu na budowę.Aby uzyskać więcej informacji o warunkach, zobacz Warunki MSBuild.

Celów początkowych

InitialTargets Atrybut Projekt element określa cele, które będą uruchamiane po raz pierwszy, nawet jeśli obiekty docelowe są określone w wierszu polecenia lub w DefaultTargets atrybut.Początkowe obiekty docelowe są zazwyczaj używane do kontroli błędów.

Wartość InitialTargets atrybut może być rozdzielone średnikami, uporządkowana lista obiektów docelowych.W następującym przykładzie określono, że Warm cel działa, a następnie Eject cel działa.

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

Zaimportowane projekty mogą mieć swoje własne InitialTargets atrybuty.Wszystkie cele początkowe są łączone ze sobą i uruchamiane w kolejności.

Aby uzyskać więcej informacji, zobacz Porady: określanie pierwszego obiektu docelowego do kompilacji.

Domyślne elementy docelowe

DefaultTargets Atrybut Projekt element określa, które cel lub cele są wbudowane Jeśli element docelowy nie jest jawnie określony w wierszu polecenia.

Wartość DefaultTargets atrybut może być rozdzielone średnikami, uporządkowaną listę domyślne elementy docelowe.W następującym przykładzie określono, że Clean cel działa, a następnie Build cel działa.

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

Można zastąpić domyślne elementy docelowe przy użyciu /target przełączyć się w wierszu polecenia.W następującym przykładzie określono, że Build cel działa, a następnie Report cel działa.Po określeniu celów w ten sposób wszelkie domyślne elementy docelowe są ignorowane.

msbuild /target:Build;Report

Jeśli celów początkowych i domyślne elementy docelowe są określone, a nie z wiersza polecenia obiekty docelowe są określone, program MSBuild po raz pierwszy uruchamia celów początkowych, a następnie uruchamia domyślne elementy docelowe.

Zaimportowane projekty mogą mieć swoje własne DefaultTargets atrybuty.Pierwszy DefaultTargets napotkano atrybut określa domyślny, który uruchomi obiektów docelowych.

Aby uzyskać więcej informacji, zobacz Porady: określanie pierwszego obiektu docelowego do kompilacji.

Pierwszy element docelowy

Jeśli nie ma żadnych celów początkowych, domyślne elementy docelowe lub cele wiersza polecenia, a następnie pierwszy element docelowy jest uruchamiany program MSBuild napotka w pliku projektu lub jakiegokolwiek projektu, importowane pliki.

Miejsce docelowe zależności

Cele można opisać relacji zależności między sobą.DependsOnTargets Atrybut wskazuje, że element docelowy zależy od innych elementów docelowych.Na przykład:

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

Program MSBuild mówi, że Serve zależy od docelowej Chop docelowych i Cook miejsce docelowe.Uruchamia program MSBuild Chop miejsce docelowe, a następnie uruchamia Cook miejsce docelowe, przed uruchomieniem Serve miejsce docelowe.

Przed innymi obiektami i po obiektów docelowych

W wersji 4.0 programu MSBuild można określić kolejność wartości docelowych za pomocą BeforeTargets i AfterTargets atrybuty.

Należy rozważyć następujący skrypt.

<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>

Aby utworzyć cel pośredni Optimize który jest uruchamiany po Compile cel, lecz przed Link cel, Dodaj następujące celu gdziekolwiek w Project element.

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

Określenie kolejności kompilacji docelowej

MSBuild określa kolejność wartości docelowych kompilacji się następujące zmiany:

  1. InitialTargetsobiekty docelowe są uruchamiane.

  2. Cele określone w wierszu polecenia przez /target przełącznika są uruchamiane.Jeśli określisz żadne obiekty docelowe w wierszu polecenia, a następnie DefaultTargets obiekty docelowe są uruchamiane.Jeśli żadna nie jest obecny, pierwszy napotkał element docelowy jest uruchamiany.

  3. Condition Atrybut obiektu docelowego jest oceniany.Jeśli Condition atrybut jest obecny i daje w wyniku false, obiekt docelowy nie jest wykonywany i nie ma dalszych wpływu na budowę.

  4. Przed wykonaniem elementu docelowego, jej DependsOnTargets obiekty docelowe są uruchamiane.

  5. Przed wykonaniem tarczę dowolnego miejsce docelowe zawierającą listę go w BeforeTargets atrybut jest uruchamiany.

  6. Przed wykonaniem elementu docelowego, jej Inputs atrybutu i Outputs atrybutu są porównywane.Jeśli program MSBuild ustali, że wszelkie pliki wyjściowe są nieaktualne w odniesieniu do odpowiedniego pliku wejściowego lub pliki, a następnie MSBuild wykonuje obiektu docelowego.W przeciwnym razie program MSBuild pomija obiektu docelowego.

  7. Po obiektem docelowym jest wykonywane lub zostało pominięte, dowolnego obiektu docelowego, który jest wyświetlany w AfterTargets atrybut jest uruchamiany.

Zobacz też

Koncepcje

Obiekty docelowe w programie MSBuild