Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Doelen moeten worden geordend als de invoer voor het ene doel afhankelijk is van de uitvoer van een ander doel. U kunt deze kenmerken gebruiken om de volgorde op te geven waarin doelen worden uitgevoerd:
InitialTargets. Met ditProjectkenmerk worden de doelen opgegeven die eerst worden uitgevoerd, zelfs als doelen zijn opgegeven op de opdrachtregel of in hetDefaultTargetskenmerk.DefaultTargets. DitProjectkenmerk geeft aan welke doelen worden uitgevoerd als een doel niet expliciet op de opdrachtregel is opgegeven.DependsOnTargets. Met ditTargetkenmerk worden doelen opgegeven die moeten worden uitgevoerd voordat dit doel kan worden uitgevoerd.BeforeTargetsenAfterTargets. DezeTargetkenmerken geven aan dat dit doel vóór of na de opgegeven doelen moet worden uitgevoerd.
Over het algemeen moet u niet afhankelijk zijn van de declaratievolgorde om op te geven welke taken vóór andere taken worden uitgevoerd.
Een doel wordt nooit tweemaal uitgevoerd tijdens een build, zelfs als een volgend doel in de build ervan afhankelijk is. Zodra een doel is uitgevoerd, is de bijdrage aan de build voltooid.
Doelen kunnen een Condition kenmerk hebben. Als de opgegeven voorwaarde wordt geëvalueerd tot false, wordt het doel niet uitgevoerd en heeft dat geen effect op de build. Zie Voorwaarden voor meer informatie over voorwaarden.
Eerste doelen
Het InitialTargets kenmerk van het Project-element geeft doelen op die eerst worden uitgevoerd, zelfs als doelen zijn opgegeven op de opdrachtregel of in het DefaultTargets kenmerk. Initiële doelen worden doorgaans gebruikt voor foutcontrole.
De waarde van het InitialTargets kenmerk kan een door puntkomma's gescheiden, geordende lijst met doelen zijn. In het volgende voorbeeld wordt aangegeven dat het Warm doel wordt uitgevoerd en vervolgens het Eject doel wordt uitgevoerd.
<Project InitialTargets="Warm;Eject">
Geïmporteerde projecten kunnen hun eigen InitialTargets kenmerken hebben. Alle initiële doelen worden samengevoegd en op volgorde uitgevoerd.
Zie voor meer informatie Hoe u bepaalt welke target als eerste wordt gebouwd.
Standaarddoelen
Het DefaultTargets kenmerk van het Project-element geeft aan welk doel of welke doelen worden gebouwd als een doel niet expliciet is opgegeven in een opdrachtregel.
De waarde van het DefaultTargets kenmerk kan een door puntkomma's gescheiden, geordende lijst met standaarddoelen zijn. In het volgende voorbeeld wordt aangegeven dat het Clean doel wordt uitgevoerd en vervolgens het Build doel wordt uitgevoerd.
<Project DefaultTargets="Clean;Build">
U kunt de standaarddoelen overschrijven door de -target optie op de commandoregel te gebruiken. In het volgende voorbeeld wordt aangegeven dat het Build doel wordt uitgevoerd en vervolgens het Report doel wordt uitgevoerd. Wanneer u doelen op deze manier opgeeft, worden alle standaarddoelen genegeerd.
msbuild -target:Build;Report
Als zowel de eerste doelen als de standaarddoelen zijn opgegeven en als er geen opdrachtregeldoelen zijn opgegeven, voert MSBuild eerst de eerste doelen uit en voert vervolgens de standaarddoelen uit.
Geïmporteerde projecten kunnen hun eigen DefaultTargets kenmerken hebben. Het eerste DefaultTargets kenmerk dat is aangetroffen, bepaalt welke standaarddoelen worden uitgevoerd.
Zie voor meer informatie Hoe u bepaalt welke target als eerste wordt gebouwd.
Eerste doel
Als er geen initiële doelen, standaarddoelen of opdrachtregeldoelen zijn, voert MSBuild het eerste doel uit dat het tegenkomt in het projectbestand of geïmporteerde projectbestanden.
Doelafhankelijkheden
Doelen kunnen afhankelijkheidsrelaties met elkaar beschrijven. Het DependsOnTargets kenmerk geeft aan dat een doel afhankelijk is van andere doelen. Bijvoorbeeld
<Target Name="Serve" DependsOnTargets="Chop;Cook" />
vertelt MSBuild dat het Serve doel afhankelijk is van het Chop doel en het Cook doel. MSBuild voert het Chop doel uit en voert vervolgens het Cook doel uit voordat het doel Serve wordt uitgevoerd.
Opmerking
De standaarddoelen in de SDK definiëren een aantal DependsOn eigenschappen die de lijst met doelen bevatten die afhankelijkheden zijn voor dat doel (bijvoorbeeld$(BuildDependsOn)$(CleanDependsOn), enzovoort). Bijvoorbeeld
<Target Name="Build" DependsOnTargets="$(BuildDependsOn)">
Als u een project wilt aanpassen, kunt u de DependsOn eigenschappen overschrijven met aanvullende aangepaste doelen waarmee het buildproces wordt uitgebreid, zoals beschreven in Het buildproces van Visual Studio uitbreiden.
BeforeTargets en AfterTargets
U kunt de doelvolgorde opgeven met behulp van de BeforeTargets en AfterTargets kenmerken.
Houd rekening met het volgende script.
<Project DefaultTargets="Compile;Link">
<Target Name="Compile">
<Message Text="Compiling" />
</Target>
<Target Name="Link">
<Message Text="Linking" />
</Target>
</Project>
Als u een tussenliggend doel Optimize wilt maken dat na het Compile doel wordt uitgevoerd, maar vóór het Link doel, voegt u het volgende doel ergens in het Project element toe.
<Target Name="Optimize" AfterTargets="Compile">
<Message Text="Optimizing" />
</Target>
U kunt ook de volgorde opgeven als
<Target Name="Optimize" BeforeTargets="Link">
<Message Text="Optimizing" />
</Target>
Het is niet handig om zowelBeforeTargets als AfterTargets op hetzelfde doel op te geven. Zoals beschreven in de volgende sectie, zal alleen het eerste doel dat wordt aangetroffen ervoor zorgen dat het nieuwe doel wordt uitgevoerd.
De buildvolgorde van het doel bepalen
MSBuild bepaalt de doelbuildvolgorde als volgt:
InitialTargetsdoelen worden uitgevoerd.Doelen die zijn opgegeven op de opdrachtregel door de doelswitch worden uitgevoerd. Als u geen doelen opgeeft op de opdrachtregel, worden de
DefaultTargetsdoelen uitgevoerd. Als geen van beide aanwezig is, wordt het eerste doel uitgevoerd.Het
Conditionkenmerk van het doel wordt geëvalueerd. Als hetConditionkenmerk aanwezig is en wordt geëvalueerd alsfalse, wordt het doel niet uitgevoerd en heeft het geen verdere invloed op de build.Andere doelen die het voorwaardelijke doel vermelden in
BeforeTargetsofAfterTargetsnog steeds in de voorgeschreven volgorde uitvoeren, ongeacht het resultaat van de voorwaarde.Voordat het doelwit wordt uitgevoerd of overgeslagen, worden de
DependsOnTargetsdoelwitten uitgevoerd, tenzij hetConditionkenmerk wordt toegepast op het doelwit en beoordeeld wordt alsfalse.Opmerking
Een target wordt beschouwd als overgeslagen als het niet wordt uitgevoerd omdat de uitvoeritems de status up-to-date hebben (zie incrementele build). Deze controle wordt uitgevoerd net voordat de taken in het doel worden uitgevoerd en heeft geen invloed op de volgorde van de uitvoering van doelen.
Voordat het doel wordt uitgevoerd of overgeslagen, wordt elk ander doel dat het doel in een
BeforeTargetskenmerk noemt, uitgevoerd.Voordat het doel wordt uitgevoerd, worden het
Inputskenmerk enOutputskenmerk ervan vergeleken. Als MSBuild bepaalt dat uitvoerbestanden verouderd zijn met betrekking tot het bijbehorende invoerbestand of de bijbehorende invoerbestanden, voert MSBuild het doel uit. Anders slaat MSBuild het doel over.Nadat het doel is uitgevoerd of overgeslagen, wordt elk ander doel dat het in een
AfterTargetskenmerk vermeldt, uitgevoerd.