MSBuild – úloha
Sestaví projekty MSBuild z jiného projektu MSBuild.
Parametry
Následující tabulka popisuje parametry MSBuild
úlohy.
Parametr | Popis |
---|---|
BuildInParallel |
Volitelný Boolean parametr.Pokud true jsou projekty zadané v parametru Projects sestaveny paralelně, pokud je to možné. Výchozí hodnota je false . |
Projects |
Požadovaný parametr ITaskItem[] .Určuje soubory projektu, které se mají sestavit. |
Properties |
Volitelný String parametr.Seznam párů název/hodnota s oddělovači středníků, které se použijí jako globální vlastnosti podřízeného projektu. Při zadání tohoto parametru je funkčně ekvivalentní nastavení vlastností, které mají -property switch při sestavení pomocí MSBuild.exe. Příklad: Properties="Configuration=Debug;Optimize=$(Optimize)" Když předáte vlastnosti projektu prostřednictvím parametru Properties , nástroj MSBuild může vytvořit novou instanci projektu i v případě, že soubor projektu již byl načten. Nástroj MSBuild vytvoří jednu instanci projektu pro danou cestu projektu a jedinečnou sadu globálních vlastností. Toto chování například umožňuje vytvořit více úloh MSBuild, které volají myproject.proj, s configuration=release a získáte jednu instanci myproject.proj (pokud nejsou v úloze zadány žádné jedinečné vlastnosti). Pokud zadáte vlastnost, která dosud nebyla zobrazena nástrojem MSBuild, nástroj MSBuild vytvoří novou instanci projektu, kterou lze sestavit paralelně s jinými instancemi projektu. Například konfigurace vydané verze může sestavit současně s konfigurací ladění. |
RebaseOutputs |
Volitelný Boolean parametr.Pokud true relativní cesty cílových výstupních položek z sestavených projektů mají své cesty upravené tak, aby byly relativní vzhledem k volajícímu projektu. Výchozí hodnota je false . |
RemoveProperties |
Volitelný String parametr.Určuje sadu globálních vlastností, které se mají odebrat. |
RunEachTargetSeparately |
Volitelný Boolean parametr.Pokud true , MSBuild úloha vyvolá každý cíl v seznamu předané MSBuild jeden po druhém místo současně. Nastavení tohoto parametru tak, aby true se zajistilo, že se další cíle volají i v případě, že dříve vyvolané cíle selhaly. Jinak by chyba sestavení zastavila vyvolání všech následných cílů. Výchozí hodnota je false . |
SkipNonexistentProjects |
Volitelný Boolean parametr.Pokud true se soubory projektu, které na disku neexistují, přeskočí. Jinak tyto projekty způsobí chybu. Výchozí hodnota false je . |
SkipNonexistentTargets |
Volitelný Boolean parametr.Pokud true se soubory projektu, které existují, ale neobsahují název Targets , přeskočí. Jinak tyto projekty způsobí chybu. Výchozí hodnota false je . Představeno v NÁSTROJi MSBuild 15.5. |
StopOnFirstFailure |
Volitelný Boolean parametr.Pokud true se některé z projektů nepodaří sestavit, nebudou sestaveny žádné další projekty. V současné době se nepodporuje při paralelním sestavování (s více procesory). |
TargetAndPropertyListSeparators |
Volitelný String[] parametr.Určuje seznam cílů a vlastností jako Project metadata položky). Před zpracováním nebudou oddělovače uchycené. Např. %3B (řídicí znak ;) bude považován za neuchycený znak ;. |
TargetOutputs |
Volitelný ITaskItem[] výstupní parametr jen pro čtení.Vrátí výstupy sestavených cílů ze všech souborů projektu. Vrátí se pouze výstupy ze zadaných cílů, nikoli výstupy, které mohou existovat na cílech, na kterých tyto cíle závisejí. Parametr TargetOutputs obsahuje také následující metadata:- MSBuildSourceProjectFile : Soubor projektu MSBuild, který obsahuje cíl, který nastaví výstupy.- MSBuildSourceTargetName : Cíl, který nastaví výstupy. Poznámka: Pokud chcete identifikovat výstupy z každého souboru projektu nebo cíle samostatně, spusťte MSBuild úlohu samostatně pro každý soubor projektu nebo cíl. Pokud úlohu spustíte MSBuild pouze jednou pro sestavení všech souborů projektu, výstupy všech cílů se shromažďují do jednoho pole. |
Targets |
Volitelný String parametr.Určuje cíl nebo cíle, které se mají sestavit v souborech projektu. K oddělení seznamu cílových názvů použijte středník. Pokud v MSBuild úkolu nejsou zadány žádné cíle, jsou vytvořeny výchozí cíle zadané v souborech projektu. Poznámka: Cíle musí nastat ve všech souborech projektu. Pokud ne, dojde k chybě sestavení. |
ToolsVersion |
Volitelný String parametr.Určuje, co ToolsVersion se má použít při sestavování projektů předaných tomuto úkolu.Umožňuje úlohu MSBuild vytvořit projekt, který cílí na jinou verzi rozhraní .NET Framework než projekt zadaný v projektu. Platné hodnoty jsou 2.0 a 3.0 3.5 . Výchozí hodnota je 3.5 . |
Poznámky
Kromě výše uvedených parametrů tato úloha dědí parametry z TaskExtension třídy, která sama dědí z Task třídy. Seznam těchto dalších parametrů a jejich popisů naleznete v tématu TaskExtension základní třída.
Na rozdíl od použití úlohy Exec ke spuštění MSBuild.exe, tento úkol používá stejný proces MSBuild k sestavení podřízených projektů. Seznam již vytvořených cílů, které lze přeskočit, se sdílí mezi nadřazeným a podřízeným sestavením. Tato úloha je také rychlejší, protože se nevytvořil žádný nový proces MSBuild.
Tento úkol může zpracovávat nejen soubory projektu, ale také soubory řešení.
Veškerá konfigurace, kterou nástroj MSBuild vyžaduje, aby bylo možné vytvářet projekty najednou, i když konfigurace zahrnuje vzdálenou infrastrukturu (například porty, protokoly, vypršení časového limitu, opakování atd.), musí být konfigurovatelná pomocí konfiguračního souboru. Pokud je to možné, měly by být položky konfigurace možné zadat jako parametry MSBuild
úkolu.
Počínaje verzí MSBuild 3.5 se projekty řešení nyní zpřístupní cílovýmoutům ze všech dílčích projektů, které sestaví.
Předání vlastností do projektů
Ve verzích NÁSTROJE MSBuild před MSBuild 3.5 bylo předání různých sad vlastností různým projektům uvedeným v položce NÁSTROJE MSBuild náročné. Pokud jste použili atribut Properties úlohy MSBuild, pak se jeho nastavení použilo na všechny projekty, které se sestavují, pokud jste úkol MSBuild dávkovali a podmíněně poskytli různé vlastnosti pro každý projekt v seznamu položek.
MSBuild 3.5 však poskytuje dvě nové rezervované položky metadat, Vlastnosti a DalšíProperties, které poskytují flexibilní způsob předávání různých vlastností pro různé projekty, které se vytvářejí pomocí úlohy MSBuild.
Poznámka:
Tyto nové položky metadat se vztahují pouze na položky předané v atributu Projects úlohy MSBuild.
Výhody sestavení s více procesory
Jednou z hlavních výhod použití těchto nových metadat je, když vytváříte projekty paralelně v systému s více procesory. Metadata umožňují konsolidovat všechny projekty do jednoho volání úlohy MSBuild, aniž by bylo nutné provádět jakékoli dávkové nebo podmíněné úlohy NÁSTROJE MSBuild. A když voláte pouze jeden úkol MSBuild, všechny projekty uvedené v atributu Projects budou sestaveny paralelně. (Pouze pokud BuildInParallel=true
je však atribut v úkolu MSBuild.) Další informace naleznete v tématu Paralelní sestavování více projektů.
Metadata vlastností
Při zadání přepíše metadata vlastností parametr Vlastnosti úlohy, zatímco metadata AdditionalProperties se připojí k definicím parametru.
Běžným scénářem je vytváření více souborů řešení pomocí úlohy MSBuild, pouze při použití různých konfigurací sestavení. Možná budete chtít sestavit řešení a1 pomocí konfigurace ladění a řešení a2 pomocí konfigurace vydané verze. V nástroji MSBuild 2.0 by tento soubor projektu vypadal takto:
Poznámka:
V následujícím příkladu zadejte "..." představuje další soubory řešení.
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>
Pomocí metadat vlastností však můžete zjednodušit použití jedné úlohy MSBuild, jak je znázorněno v následujícím příkladu:
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>
- nebo -
<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>
Metadata additionalProperties
Představte si následující scénář, ve kterém vytváříte dva soubory řešení pomocí úlohy MSBuild, a to jak pomocí konfigurace vydané verze, ale jeden pomocí architektury x86 a druhý pomocí architektury ia64. V nástroji MSBuild 2.0 byste museli vytvořit více instancí úlohy MSBuild: jeden k sestavení projektu pomocí konfigurace vydané verze s architekturou x86, druhá pomocí konfigurace vydané verze s architekturou ia64. Soubor projektu by vypadal takto:
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>
Pomocí metadat AdditionalProperties můžete zjednodušit použití jedné úlohy NÁSTROJE MSBuild pomocí následujících:
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>
Příklad
Následující příklad používá MSBuild
úlohu k sestavení projektů určených kolekcí ProjectReferences
položek. Výsledné cílové výstupy jsou uloženy v kolekci AssembliesBuiltByChildProjects
položek.
<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>