MSBuild – úloha

Sestaví projekty MSBuild z jiného projektu MSBuild.

Parametry

Následující tabulka popisuje parametry MSBuild úlohy.

Parametr Popis
BuildInParallel Volitelný parametr Boolean.

Pokud true, projekty zadané v parametru Projects jsou integrované paralelně, pokud je to možné. Výchozí hodnota je false.
Projects Povinný ITaskItem[] parametr.

Určuje soubory projektu, které se mají sestavit.
Properties Volitelný parametr String.

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. Když zadáte tento parametr, je funkčně ekvivalentní nastavení vlastností, které mají vlastnost -property přepnout při sestavování pomocí MSBuild.exe. Napří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á ještě nebyla zobrazena nástrojem MSBuild, nástroj MSBuild vytvoří novou instanci projektu, která se dá sestavit paralelně s jinými instancemi projektu. Například konfigurace vydané verze může sestavit současně s konfigurací ladění.
RebaseOutputs Volitelný parametr Boolean.

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ý parametr String.

Určuje sadu globálních vlastností, které se mají odebrat.
RunEachTargetSeparately Volitelný parametr Boolean.

Pokud true, úloha MSBuild vyvolá každý cíl v seznamu předané msBuild jeden po druhém místo současně. Nastavení tohoto parametru na true zaručuje, že se další cíle vyvolá 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ý parametr Boolean.

Pokud true, přeskočí se soubory projektu, které na disku neexistují. Jinak tyto projekty způsobí chybu. Výchozí hodnota je false.
SkipNonexistentTargets Volitelný parametr Boolean.

Pokud true, soubory projektu, které existují, ale neobsahují pojmenované Targets, se přeskočí. Jinak tyto projekty způsobí chybu. Výchozí hodnota je false. Představeno v NÁSTROJi MSBuild 15.5.
StopOnFirstFailure Volitelný parametr Boolean.

Pokud true, pokud se některému z projektů nepodaří sestavit, nebudou sestaveny žádné další projekty. V současné době se tato možnost nepodporuje při paralelním sestavování (s více procesory).
TargetAndPropertyListSeparators Volitelný parametr String[].

Určuje seznam cílů a vlastností jako metadata položky Project). Oddělovače jsou před zpracováním nepřesné. Například %3B (řídicí znak ;) se považuje za neskutečnou ;.
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 spustíte úlohu MSBuild pouze jednou pro sestavení všech souborů projektu, výstupy všech cílů se shromáždí do jednoho pole.
Targets Volitelný parametr String.

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 nejsou v úkolu MSBuild 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ý parametr String.

Určuje ToolsVersion, které se mají 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, 3.0a 3.5. Výchozí hodnota je 3.5.

Poznámky

Kromě dříve uvedených parametrů dědí tato úloha parametry z třídy TaskExtension, která sama dědí z třídy Task. Seznam těchto dalších parametrů a jejich popisů naleznete v tématu TaskExtension základní třídy.

Na rozdíl od použití úlohy Exec ke spuštění MSBuild.exepoužívá tento úkol stejný proces NÁSTROJE 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 verzi MSBuild 17.12 a novější jsou přijímány formáty souborů řešení .slnx i .sln.

Všechny konfigurace, které vyžaduje nástroj MSBuild, aby umožňovaly sestavení projektů ve stejnou dobu, 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é, položky konfigurace by měly být u MSBuild úlohy možné zadat jako parametry ú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 Vlastnosti úkolu MSBuild, pak se jeho nastavení použilo pro všechny projekty, které se sestavují, pokud jste nenasádili úlohu MSBuild a podmíněně poskytla 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 AdditionalProperties, 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 jsou použitelné pouze pro položky předané v atributu Projekty ú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 úlohy MSBuild volání bez nutnosti provádět 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 jsou sestaveny paralelně. (Pouze pokud je však atribut BuildInParallel=true v úlohy MSBuild.) Další informace naleznete v tématu Sestavení více projektů paralelně.

Metadata vlastností

Při zadání přepíše metadata vlastností parametr Vlastnosti úlohy, zatímco AdditionalProperties metadata 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 pomocí 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>
    <Target Name="Build">
        <MSBuild Projects="a1.sln..." Properties="Configuration=Debug"/>
        <MSBuild Projects="a2.sln" Properties="Configuration=Release"/>
    </Target>
</Project>

Pomocí metadat Vlastnosti však můžete tento kód zjednodušit tak, aby používal jeden úlohy MSBuild, jak je znázorněno v následujícím příkladu:

a.proj

<Project>
    <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>
    <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 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>
    <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 MSBuild následujícím způsobem:

a.proj

<Project>
    <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á úlohu MSBuild k sestavení projektů určených kolekcí položek ProjectReferences. Výsledné cílové výstupy jsou uloženy v kolekci položek AssembliesBuiltByChildProjects.

<Project>

    <ItemGroup>
        <ProjectReferences Include="*.*proj" />
    </ItemGroup>

    <Target Name="BuildOtherProjects">
        <MSBuild
            Projects="@(ProjectReferences)"
            Targets="Build">
            <Output
                TaskParameter="TargetOutputs"
                ItemName="AssembliesBuiltByChildProjects" />
        </MSBuild>
    </Target>

</Project>

Viz také