Sdílet prostřednictvím


Položky nástroje MSBuild

MSBuild položky jsou vstupy do sestavení systému a obvykle představují soubory.Položky jsou seskupeny do typů položek, které jsou založeny na jejich názvy prvků.Typy položek jsou pojmenovány seznamy položek, které lze použít jako parametry pro úkoly.Úkoly pomocí hodnot položky, proveďte kroky v procesu sestavení.

Protože položky jsou pojmenovány podle typu zboží, do které patří, termíny "položka" a "hodnota položky" zaměnitelné.

V tomto tématu

  • Vytváření položek v souboru projektu

  • Během vytváření položek

  • Odkazování na položky v souboru projektu

  • Použití zástupných znaků k určení položek

  • Pomocí atributu vyloučit

  • Metadata položky

    • Odkazování na Metadata položky v souboru projektu

    • Známé Metadata položky

    • Transformace typů položek pomocí metadat

  • Definice položek

  • Atributy pro položky v ItemGroup na cíl

    • Odebrat atribut

    • Atribut KeepMetadata

    • Atribut RemoveMetadata

    • Atribut KeepDuplicates

Vytváření položek v souboru projektu

Deklaraci položky v souboru projektu jako podřízené prvky ItemGroup prvku.Název podřízeného elementu je typ položky.Include (Soubory) položky typu položka zahrnuta Určuje atribut elementu.Například následující kód XML vytvoří typ položky s názvem Compile, který obsahuje dva soubory.

<ItemGroup>
    <Compile Include = "file1.cs"/>
    <Compile Include = "file2.cs"/>
</ItemGroup>

Položka "file2.cs" nemá nahradit položku "file1.cs"; Místo toho je název souboru přidán k seznamu hodnot Compile typ položky.Během fáze hodnocení sestavení nelze odebrat položku z typu položky.

Následující XML kód vytvoří stejný typ položky deklarováním oba soubory v jednom Include atribut.Všimněte si, že názvy souborů jsou odděleny středníkem.

<ItemGroup>
    <Compile Include = "file1.cs;file2.cs"/>
</ItemGroup>

Během vytváření položek

Položky, které jsou mimo Target prvky jsou přiřazeny hodnoty během fáze hodnocení sestavení.Během fáze spuštění následných můžete položky vytvořit nebo upravit následujícími způsoby:

  • Libovolný úkol můžete posílat zboží.K vyzařování zboží, úkol element musí mít dítě výstup element, který má ItemName atribut.

  • CreateItem úloh můžete posílat zboží.Toto využití je zastaralý.

  • Spuštění 3.5 rozhraní.NET Framework, Target prvky mohou obsahovat ItemGroup prvky, které mohou obsahovat položky prvky.

Odkazování na položky v souboru projektu

Referenční typy zboží v celém souboru projektu, použijte syntaxi @(ItemType).Typ položky v předchozím příkladu by odkazovat například pomocí @(Compile).Pomocí této syntaxe lze předat položky úkolů zadáním položky jako parametr úkolu.Další informace naleznete v tématu Postupy: Výběr souborů pro sestavení.

Standardně jsou položky typu položky odděleny středníky (;) při je rozbalen.Můžete použít syntaxi @(Typ položky, "oddělovač") zadat výchozí oddělovač.Další informace naleznete v tématu Postupy: Zobrazování seznamu položek oddělených čárkami.

Použití zástupných znaků k určení položek

Můžete použít **, *, a?zástupné znaky k určení skupiny souborů jako vstupy pro sestavení namísto výpis každý soubor samostatně.

  • Na?zástupný znak odpovídá jednomu znaku.

  • * Zástupný znak odpovídá žádnému nebo více znakům.

  • ** Zástupný znak odpovídá částečnou cestu.

Můžete například určit všechny .cs soubory v adresáři, který obsahuje soubor projektu pomocí následujícího elementu v souboru projektu.

<CSFile Include="*.cs"/>

Následující prvek vybere všechny .vb souborů na jednotce D::

<VBFile Include="D:/**/*.vb"/>

Další informace o zástupných znaků naleznete v tématu Postupy: Výběr souborů pro sestavení.

Pomocí atributu vyloučit

Mohou obsahovat prvky položky Exclude atribut, který vylučuje určité položky (soubory) z typu položky.Exclude s zástupné znaky se obvykle používá atribut.Například následující XML kód přidá každý soubor .cs v adresáři typu položky CSFile, kromě DoNotBuild.cs souboru.

<ItemGroup>
    <CSFile  Include="*.cs"  Exclude="DoNotBuild.cs"/>
</ItemGroup>

Exclude Atribut ovlivňuje pouze položky přidané Include atributu v elementu položku, která obsahuje oba.Následující příklad by vyloučení souboru Form1.cs, která byla přidána v předchozí položce prvek.

<Compile Include="*.cs" />
<Compile Include="*.res" Exclude="Form1.cs">

Další informace naleznete v tématu Postupy: Vyloučení souborů ze sestavení.

Metadata položky

Položky mohou obsahovat metadata spolu s informacemi v Include a Exclude atributy.Tato metadata slouží úkoly vyžadující další informace o zboží nebo dávkové úkoly a cíle.Další informace naleznete v tématu Dávkování nástroje MSBuild.

Metadata jsou kolekci párů klíč hodnota, které jsou deklarovány v souboru projektu jako elementy podřízené položky prvku.Název podřízeného elementu je název metadat a podřízený prvek hodnotu hodnota metadat.

Metadata je přidružen položky element, který jej obsahuje.Například následující XML kód přidá Culture metadat, který má hodnotu Fr "one.cs" a "two.cs" položek CSFile typ položky.

<ItemGroup>
    <CSFile Include="one.cs;two.cs">
        <Culture>Fr</Culture>
    </CSFile>
</ItemGroup>

Položka může mít nula nebo více hodnoty metadat.Kdykoli můžete změnit hodnoty metadat.Pokud nastavíte metadata na prázdnou hodnotu, je efektivně jej odebrat ze sestavení.

Odkazování na Metadata položky v souboru projektu

Metadata položky v celém souboru projektu můžete odkazovat pomocí syntaxe %(ItemMetadataName).Pokud existuje nejednoznačnosti, kvalifikovat odkazovat pomocí názvu typu položky.For example, můžete zadat %(ItemType.ItemMetaDataName).Následující příklad používá metadata zobrazení do dávkové úlohy zprávy.Další informace o použití položky metadat pro dávkování viz Metadata položek v dávkování úloh.

<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
        <Stuff Include="One.cs" >
            <Display>false</Display>
        </Stuff>
        <Stuff Include="Two.cs">
            <Display>true</Display>
        </Stuff>
    </ItemGroup>
    <Target Name="Batching">
        <Message Text="@(Stuff)" Condition=" '%(Display)' == 'true' "/>
    </Target>
</Project>

Známé Metadata položky

Při přidání položky do typu položky, položky je přiřazena některá známá metadata.Například všechny položky mají známé metadata %(Filename), jehož hodnota je název souboru položky.Další informace naleznete v tématu Metadata známé položky nástroje MSBuild.

Transformace typů položek pomocí metadat

Seznamy položek můžete transformovat do nové položky seznamů pomocí metadat.Například můžete transformovat typ položky CppFiles položek, které představují .cpp soubory do odpovídající seznam .obj soubory pomocí výrazu, který má @(CppFiles -> '%(Filename).obj').

Následující kód vytvoří CultureResource položky typu, který obsahuje všechny kopie EmbeddedResource položky s Culture metadat.Culture Hodnota se změní hodnotu nová metadata CultureResource.TargetDirectory.

<Target Name="ProcessCultureResources">
    <ItemGroup>
        <CultureResource Include="@(EmbeddedResource)"
            Condition="'%(EmbeddedResource.Culture)' != ''">
            <TargetDirectory>%(EmbeddedResource.Culture) </TargetDirectory>
        </CultureResource>
    </ItemGroup>
</Target>

Další informace naleznete v tématu Transformace nástroje MSBuild.

Definice položek

Spuštění 3.5 rozhraní.NET Framework můžete přidat výchozí metadat pro každý typ položky pomocí ItemDefinitionGroup element.Jako známá metadata metadata výchozí přidružen všechny položky Typ položky, který zadáte.Můžete explicitně přepsat výchozí metadat v definici položky.Například následující kód XML poskytuje Compile "one.cs" a "three.cs" metadata položky BuildDay s hodnotou "Pondělí".Kód obsahuje položku "two.cs" metadata BuildDay s hodnotou "Úterý".

<ItemDefinitionGroup>
    <Compile>
        <BuildDay>Monday</BuildDay>
    </Compile>
</ItemDefinitionGroup>
<ItemGroup>
    <Compile Include="one.cs;three.cs" />
    <Compile Include="two.cs">
        <BuildDay>Tuesday</BuildDay>
    </Compile>
</ItemGroup>

Další informace naleznete v tématu Definice položek.

Atributy pro položky v ItemGroup na cíl

Spuštění 3.5 rozhraní.NET Framework, Target prvky mohou obsahovat ItemGroup prvky, které mohou obsahovat položky prvky.Atributy v této části jsou platné, pokud jsou zadány pro položku v ItemGroup v Target.

Odebrat atribut

Položky ItemGroup mohou obsahovat cíle Remove atribut, který odebere určité položky (soubory) z typu položky.Tento atribut byl zaveden v rozhraní.NET Framework 3.5.

Následující příklad odebere každý soubor .config z kompilace typ položky.

<Target>
    <ItemGroup>
        <Compile Remove="*.config"/>
    </ItemGroup>
</Target>

Atribut KeepMetadata

Pokud v rámci cíle je generována položka, položka element může obsahovat KeepMetadata atribut.Pokud je tento atribut zadán, pouze metadata, který je uveden v seznamu názvů oddělených středníkem převedena z položky zdroje na položku cíl.Je ekvivalentní zadání není prázdná hodnota tohoto atributu.KeepMetadata Atributu byla zavedena v 4.5 rozhraní .NET Framework.

Následující příklad ukazuje způsob použití KeepMetadata atribut.

<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003"
ToolsVersion="4.0">

    <ItemGroup>
        <FirstItem Include="rhinoceros">
            <Class>mammal</Class>
            <Size>large</Size>
        </FirstItem>

    </ItemGroup>
    <Target Name="MyTarget">
        <ItemGroup>
            <SecondItem Include="@(FirstItem)" KeepMetadata="Class" />
        </ItemGroup>

        <Message Text="FirstItem: %(FirstItem.Identity)" />
        <Message Text="  Class: %(FirstItem.Class)" />
        <Message Text="  Size:  %(FirstItem.Size)"  />

        <Message Text="SecondItem: %(SecondItem.Identity)" />
        <Message Text="  Class: %(SecondItem.Class)" />
        <Message Text="  Size:  %(SecondItem.Size)"  />
    </Target>
</Project>

<!--
Output:
  FirstItem: rhinoceros
    Class: mammal
    Size:  large
  SecondItem: rhinoceros
    Class: mammal
    Size: 
-->

Atribut RemoveMetadata

Pokud v rámci cíle je generována položka, položka element může obsahovat RemoveMetadata atribut.Pokud je tento atribut zadán, všechna metadata je přenesena z položky zdroje cílové položky kromě metadat jejichž názvy jsou obsaženy v seznamu názvů oddělených středníkem.Je ekvivalentní zadání není prázdná hodnota tohoto atributu.RemoveMetadata Atributu byla zavedena v 4.5 rozhraní .NET Framework.

Následující příklad ukazuje způsob použití RemoveMetadata atribut.

<Project ToolsVersion="4.0" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">

    <PropertyGroup>
        <MetadataToRemove>Size;Material</MetadataToRemove>
    </PropertyGroup>

    <ItemGroup>
        <Item1 Include="stapler">
            <Size>medium</Size>
            <Color>black</Color>
            <Material>plastic</Material>
        </Item1>
    </ItemGroup>

    <Target Name="MyTarget">
        <ItemGroup>
            <Item2 Include="@(Item1)" RemoveMetadata="$(MetadataToRemove)" />
        </ItemGroup>

        <Message Text="Item1: %(Item1.Identity)" />
        <Message Text="  Size:     %(Item1.Size)" />
        <Message Text="  Color:    %(Item1.Color)" />
        <Message Text="  Material: %(Item1.Material)" />
        <Message Text="Item2: %(Item2.Identity)" />
        <Message Text="  Size:     %(Item2.Size)" />
        <Message Text="  Color:    %(Item2.Color)" />
        <Message Text="  Material: %(Item2.Material)" />
    </Target>
</Project>

<!--
Output: 
  Item1: stapler
    Size:     medium
    Color:    black
    Material: plastic
  Item2: stapler
    Size:     
    Color:    black
    Material: 
-->

Atribut KeepDuplicates

Pokud v rámci cíle je generována položka, položka element může obsahovat KeepDuplicates atribut.KeepDuplicatesje Boolean atribut, který určuje, zda má položka přidána do cílové skupiny, pokud je položka přesný duplikát již existující položky.

Pokud zdrojová a cílová položka stejnou hodnotu zahrnout, ale různých metadat, je položka přidána i KeepDuplicates je nastavena na false.Je ekvivalentní zadání není prázdná hodnota tohoto atributu.KeepDuplicates Atributu byla zavedena v 4.5 rozhraní .NET Framework.

Následující příklad ukazuje způsob použití KeepDuplicates atribut.

<Project ToolsVersion="4.0" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">

    <ItemGroup>
        <Item1 Include="hourglass;boomerang" />
        <Item2 Include="hourglass;boomerang" />
    </ItemGroup>

    <Target Name="MyTarget">
        <ItemGroup>
            <Item1 Include="hourglass" KeepDuplicates="false" />
            <Item2 Include="hourglass" />
        </ItemGroup>

        <Message Text="Item1: @(Item1)" />
        <Message Text="  %(Item1.Identity)  Count: @(Item1->Count())" />
        <Message Text="Item2: @(Item2)" />
        <Message Text="  %(Item2.Identity)  Count: @(Item2->Count())" />
    </Target>
</Project>

<!--
Output: 
  Item1: hourglass;boomerang
    hourglass  Count: 1
    boomerang  Count: 1
  Item2: hourglass;boomerang;hourglass
    hourglass  Count: 2
    boomerang  Count: 1
-->

Viz také

Úkoly

Postupy: Výběr souborů pro sestavení

Postupy: Vyloučení souborů ze sestavení

Postupy: Zobrazování seznamu položek oddělených čárkami

Referenční dokumentace

Item – prvek (MSBuild)

Koncepty

Definice položek

Dávkování nástroje MSBuild

Další zdroje

Koncepty nástroje MSBuild

MSBuild