MSBuild-uppgift
Skapar MSBuild-projekt från ett annat MSBuild-projekt.
Parameterar
I följande tabell beskrivs parametrarna för den MSBuild
aktiviteten.
Parameter | Beskrivning |
---|---|
BuildInParallel |
Valfri Boolean parameter.Om true skapas de projekt som anges i parametern Projects parallellt om det är möjligt. Standard är false . |
Projects |
Obligatorisk ITaskItem[] parameter.Anger de projektfiler som ska skapas. |
Properties |
Valfri String parameter.En semikolonavgränsad lista över egenskapsnamn/värdepar som ska tillämpas som globala egenskaper för det underordnade projektet. När du anger den här parametern är den funktionellt likvärdig med att ange egenskaper som har växeln -property när du skapar med MSBuild.exe. Till exempel: Properties="Configuration=Debug;Optimize=$(Optimize)" När du skickar egenskaper till projektet via parametern Properties kan MSBuild skapa en ny instans av projektet även om projektfilen redan har lästs in. MSBuild skapar en enda projektinstans för en viss projektsökväg och en unik uppsättning globala egenskaper. Med det här beteendet kan du till exempel skapa flera MSBuild-uppgifter som anropar myproject.proj, med Configuration=Release och du får en enda instans av myproject.proj (om inga unika egenskaper anges i uppgiften). Om du anger en egenskap som ännu inte har setts av MSBuild skapar MSBuild en ny instans av projektet, som kan byggas parallellt med andra instanser av projektet. En versionskonfiguration kan till exempel skapas samtidigt som en felsökningskonfiguration. |
RebaseOutputs |
Valfri Boolean parameter.Om true justeras de relativa sökvägarna för målutdataobjekt från de skapade projekten så att de är relativa till det anropande projektet. Standard är false . |
RemoveProperties |
Valfri String parameter.Anger vilken uppsättning globala egenskaper som ska tas bort. |
RunEachTargetSeparately |
Valfri Boolean parameter.Om true anropar MSBuild-aktiviteten varje mål i listan som skickas till MSBuild en i taget, i stället för samtidigt. Om du anger den här parametern till true garantier för att efterföljande mål anropas även om tidigare anropade mål misslyckades. Annars skulle ett byggfel stoppa anropet av alla efterföljande mål. Standard är false . |
SkipNonexistentProjects |
Valfri Boolean parameter.Om true hoppas projektfiler som inte finns på disken över. Annars orsakar sådana projekt ett fel. Standardinställningen är false . |
SkipNonexistentTargets |
Valfri Boolean parameter.Om true hoppas projektfiler som finns men inte innehåller namnet Targets över. Annars orsakar sådana projekt ett fel. Standardinställningen är false . Introducerades i MSBuild 15.5. |
StopOnFirstFailure |
Valfri Boolean parameter.Om true skapas inga fler projekt när ett av projekten inte kan byggas. För närvarande stöds inte det här alternativet när du skapar parallellt (med flera processorer). |
TargetAndPropertyListSeparators |
Valfri String[] parameter.Anger en lista över mål och egenskaper som Project objektmetadata). Avgränsare är inte kapslade före bearbetning. Till exempel behandlas %3B (ett undantaget ";") som om det vore en ej kapslade ';'. |
TargetOutputs |
Valfritt ITaskItem[] skrivskyddad utdataparameter.Returnerar utdata från de skapade målen från alla projektfiler. Endast utdata från de angivna målen returneras, inte några utdata som kan finnas på mål som dessa mål är beroende av. Parametern TargetOutputs innehåller också följande metadata:- MSBuildSourceProjectFile : MSBuild-projektfilen som innehåller målet som anger utdata.- MSBuildSourceTargetName : Målet som anger utdata.
Obs! Om du vill identifiera utdata från varje projektfil eller mål separat kör du MSBuild uppgift separat för varje projektfil eller mål. Om du bara kör MSBuild uppgift en gång för att skapa alla projektfiler samlas utdata från alla mål in i en matris. |
Targets |
Valfri String parameter.Anger målet eller målen som ska skapas i projektfilerna. Använd ett semikolon för att avgränsa en lista med målnamn. Om inga mål anges i den MSBuild aktiviteten skapas de standardmål som anges i projektfilerna.
Obs! Målen måste finnas i alla projektfiler. Om de inte gör det uppstår ett byggfel. |
ToolsVersion |
Valfri String parameter.Anger den ToolsVersion som ska användas när du skapar projekt som skickas till den här uppgiften.Gör att en MSBuild-uppgift kan skapa ett projekt som riktar sig mot en annan version av .NET Framework än den som anges i projektet. Giltiga värden är 2.0 , 3.0 och 3.5 . Standardvärdet är 3.5 . |
Anmärkningar
Förutom de parametrar som angavs tidigare ärver den här aktiviteten parametrar från klassen TaskExtension, som i sig ärver från klassen Task. En lista över dessa ytterligare parametrar och deras beskrivningar finns i TaskExtension-basklassen.
Till skillnad från att använda Exec-uppgift för att starta MSBuild.exeanvänder den här aktiviteten samma MSBuild-process för att skapa underordnade projekt. Listan över redan skapade mål som kan hoppas över delas mellan de överordnade och underordnade versionerna. Den här uppgiften går också snabbare eftersom ingen ny MSBuild-process skapas.
Den här uppgiften kan inte bara bearbeta projektfiler utan även lösningsfiler. I MSBuild 17.12 och senare godkänns filformat för både .slnx
och .sln
lösning.
Alla konfigurationer som krävs av MSBuild för att göra det möjligt för projekt att bygga samtidigt, även om konfigurationen omfattar fjärrinfrastruktur (till exempel portar, protokoll, tidsgränser, återförsök osv.) måste konfigureras med hjälp av en konfigurationsfil. När det är möjligt bör konfigurationsobjekt kunna anges som uppgiftsparametrar för den MSBuild
aktiviteten.
Från och med MSBuild 3.5 visas nu TargetOutputs från alla underprojekt som byggs.
Skicka egenskaper till projekt
I versioner av MSBuild före MSBuild 3.5 var det svårt att skicka olika uppsättningar egenskaper till olika projekt som anges i MSBuild-objektet. Om du använde attributet Egenskaper för den MSBuild-aktivitetentillämpades dess inställning på alla projekt som skapas om du inte har batchat MSBuild-aktiviteten och villkorligt angett olika egenskaper för varje projekt i objektlistan.
MSBuild 3.5 innehåller dock två nya reserverade metadataobjekt, Egenskaper och YtterligareEgenskaper, som ger dig ett flexibelt sätt att skicka olika egenskaper för olika projekt som skapas med hjälp av MSBuild-uppgift.
Anmärkning
Dessa nya metadataobjekt gäller endast för objekt som skickas i attributet Projects för MSBuild-uppgift.
Byggfördelar med flera processorer
En av de största fördelarna med att använda dessa nya metadata inträffar när du skapar dina projekt parallellt i ett system med flera processorer. Med metadata kan du konsolidera alla projekt till en enda MSBuild-uppgift anrop utan att behöva utföra några batchbearbetnings- eller villkorsstyrda MSBuild-uppgifter. Och när du bara anropar en enda MSBuild-uppgiftskapas alla projekt som anges i attributet Projekt parallellt. (Endast om attributet BuildInParallel=true
finns i MSBuild-uppgift.) Mer information finns i Skapa flera projekt parallellt.
Metadata för egenskaper
När det anges åsidosätter egenskaper metadata aktivitetens egenskapsparameter, medan Ytterligareegenskaper metadata läggs till i parameterns definitioner.
Ett vanligt scenario är när du skapar flera lösningsfiler med hjälp av MSBuild-uppgift, endast med hjälp av olika byggkonfigurationer. Du kanske vill skapa lösning a1 med hjälp av felsökningskonfigurationen och lösningen a2 med hjälp av versionskonfigurationen. I MSBuild 2.0 skulle den här projektfilen se ut så här:
Anmärkning
I följande exempel, "..." representerar ytterligare lösningsfiler.
a.proj
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Build">
<MSBuild Projects="a1.sln..." Properties="Configuration=Debug"/>
<MSBuild Projects="a2.sln" Properties="Configuration=Release"/>
</Target>
</Project>
Med hjälp av metadata för egenskaper kan du dock förenkla den här koden för att använda en enda MSBuild-uppgift, vilket visas i följande exempel:
a.proj
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ProjectToBuild Include="a1.sln...">
<Properties>Configuration=Debug</Properties>
</ProjectToBuild>
<ProjectToBuild Include="a2.sln">
<Properties>Configuration=Release</Properties>
</ProjectToBuild>
</ItemGroup>
<Target Name="Build">
<MSBuild Projects="@(ProjectToBuild)"/>
</Target>
</Project>
-eller-
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ProjectToBuild Include="a1.sln..."/>
<ProjectToBuild Include="a2.sln">
<Properties>Configuration=Release</Properties>
</ProjectToBuild>
</ItemGroup>
<Target Name="Build">
<MSBuild Projects="@(ProjectToBuild)"
Properties="Configuration=Debug"/>
</Target>
</Project>
AdditionalProperties-metadata
Tänk dig följande scenario där du skapar två lösningsfiler med hjälp av den MSBuild-uppgiften, båda använder versionskonfigurationen, men en med x86-arkitekturen och den andra med hjälp av ia64-arkitekturen. I MSBuild 2.0 skulle du behöva skapa flera instanser av MSBuild-uppgift: en för att skapa projektet med hjälp av versionskonfigurationen med x86-arkitekturen, den andra med hjälp av versionskonfigurationen med ia64-arkitekturen. Projektfilen skulle se ut så här:
a.proj
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Build">
<MSBuild Projects="a1.sln..." Properties="Configuration=Release;
Architecture=x86"/>
<MSBuild Projects="a2.sln" Properties="Configuration=Release;
Architecture=ia64"/>
</Target>
</Project>
Med hjälp av AdditionalProperties-metadata kan du förenkla detta genom att använda en enda MSBuild-uppgift med hjälp av följande:
a.proj
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ProjectToBuild Include="a1.sln...">
<AdditionalProperties>Architecture=x86
</AdditionalProperties>
</ProjectToBuild>
<ProjectToBuild Include="a2.sln">
<AdditionalProperties>Architecture=ia64
</AdditionalProperties>
</ProjectToBuild>
</ItemGroup>
<Target Name="Build">
<MSBuild Projects="@(ProjectToBuild)"
Properties="Configuration=Release"/>
</Target>
</Project>
Exempel
I följande exempel används MSBuild
uppgift för att skapa de projekt som anges av ProjectReferences
objektsamlingen. De resulterande målutdata lagras i den AssembliesBuiltByChildProjects
objektsamlingen.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ProjectReferences Include="*.*proj" />
</ItemGroup>
<Target Name="BuildOtherProjects">
<MSBuild
Projects="@(ProjectReferences)"
Targets="Build">
<Output
TaskParameter="TargetOutputs"
ItemName="AssembliesBuiltByChildProjects" />
</MSBuild>
</Target>
</Project>