Sdílet prostřednictvím


Definice položek

MSBuild2.0 umožňuje pomocí statické deklarace položek v souborech projektu ItemGroup prvku.Metadata mohou však přidán pouze na úrovni položky, i když metadat je shodné pro všechny položky.MSBuild3.5 představuje prvek projektu s názvem ItemDefinitionGroup , předchází toto omezení.ItemDefinitionGroup umožňuje definovat sadu definice položky, které všechny položky typu pojmenovanou položku přidat výchozí hodnoty metadat.

ItemDefinitionGroup element se zobrazí bezprostředně po projektu elementu v souboru projektu.Definice položek poskytuje následující funkce:

  • Můžete definovat globální výchozí metadata pro položky mimo cíl.Stejná metadata, platí pro všechny položky zadaného typu.

  • Typy položek, můžete mít více definicí.Při přidání další metadata specifikace typu přednost poslední specifikace.(Metadata následující pořadí importu takto vlastnosti).

  • Metadata mohou být doplňkové látky.Například hodnoty CDefines jsou podmíněně nahromaděné podle vlastností, která jsou nastavena.Například:MT;STD_CALL;DEBUG;UNICODE

  • Metadata lze odebrat.

  • Podmínky lze řídit zařazení metadat.

Položka metadat výchozí hodnoty

Položky metadata, která je definována v ItemDefinitionGroup je na prohlášení výchozí metadat.Metadata neplatí, pokud definujete položku, která se používá ItemGroup obsahují hodnoty metadat.

[!POZNÁMKA]

ItemDefinitionGroup prvek je zobrazen v mnoha příkladech v tomto tématu, ale jeho odpovídající definici ItemGroup vynechán pro přehlednost.

Metadata explicitně definované v ItemGroup přednost metadat v ItemDefinitionGroup.Metadata v ItemDefinitionGroup platí pouze pro nedefinované metadata ItemGroup.Příklad:

<ItemDefinitionGroup>
    <i>
        <m>m1</m>
        <n>n1</n>
    </i>      
</ItemDefinitionGroup>
<ItemGroup>
    <i Include="a">
        <o>o1</o>
        <n>n2</n>
    </i>
</ItemGroup>

V tomto příkladu je výchozí metadat "m" u položky "i" protože metadata "m" není explicitně definován v položce "i".Výchozí metadat "n" však není u položky "i" protože metadata "n" je již definována položka "i".

[!POZNÁMKA]

Názvy prvků XML a parametr rozlišují velká a malá písmena.Metadata položky a vlastnost položky nebo názvy nejsou rozlišována.ItemDefinitionGroup položky, které mají názvy, které se liší pouze v případě, proto by měly být považovány stejné ItemGroup.

Hodnota zdroje.

Hodnoty pro metadata, která je definována v ItemDefinitionGroup mohou pocházet z mnoha různých zdrojů takto:

  • Vlastnost PropertyGroup

  • Položky z ItemDefinitionGroup

  • Transformace položky pro položku ItemDefinitionGroup

  • Proměnné prostředí

  • Globální vlastnosti (z příkazového řádku MSBuild.exe)

  • Rezervované vlastnosti

  • Známé metadata položky z ItemDefinitionGroup

  • Oddíl CDATA <![CDATA [zde není analyzovat]] >

[!POZNÁMKA]

Metadata položky z ItemGroup je užitečné v deklaraci metadata ItemDefinitionGroup, protože ItemDefinitionGroup prvky jsou zpracovány před ItemGroup prvky.

Doplňkové látky a více definic

Při přidání definice nebo použití více ItemDefinitionGroups, mějte na paměti následující:

  • Typ doplňuje další metadata specification.

  • Poslední specifikace přednost.

Máte více ItemDefinitionGroups, každé následné specifikace přidá předchozí definice metadat.Příklad:

<ItemDefinitionGroup>
    <i>
        <m>m1</m>
        <n>n1</n>
    </i>
</ItemDefinitionGroup>
<ItemDefinitionGroup>
    <i>
        <o>o1</o>
    </i>
</ItemDefinitionGroup>

V tomto příkladu metadat "o" vkládá "m" a "n".

Kromě toho mohou být přidány také metadata dříve definované hodnoty.Příklad:

<ItemDefinitionGroup>
    <i>
        <m>m1</m>
    </i>
</ItemDefinitionGroup>
<ItemDefinitionGroup>
    <i>
        <m>%(m);m2</m>
    </i>
</ItemDefinitionGroup>  

V tomto příkladu je přidána dříve definované hodnoty pro metadata "m" (m1) na novou hodnotu (m2) tak, že konečná hodnota "m1, m2".

[!POZNÁMKA]

To může dojít také v ItemDefinitionGroup stejné.

Při přepsání dříve definovaná metadata přednost poslední specifikace.V následujícím příkladu přechází konečné hodnoty metadat "m" z "m1" s "m1a".

<ItemDefinitionGroup>
    <i>
        <m>m1</m>
    </i>
</ItemDefinitionGroup>
<ItemDefinitionGroup>
    <i>
        <m>m1a</m>
    </i>
</ItemDefinitionGroup>  

Pomocí podmínky ItemDefinitionGroup

Můžete použít podmínky v ItemDefinitionGroup řízení zařazení metadat.Příklad:

<ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
    <i>
        <m>m1</m>
    </i>
</ItemDefinitionGroup>

V tomto případě je součástí výchozí metadat "m1" u položky "i", pouze pokud je hodnota vlastnosti "Konfigurace", "Ladění".

[!POZNÁMKA]

Podmínky jsou podporovány pouze odkazy na místní metadata.

Odkazy na metadata definované v dřívějších ItemDefinitionGroup jsou místní položky skupinu definic.Obor odkazy, jsou konkrétní položky.Příklad:

<ItemDefinitionGroup>
    <test>
        <yes>1</yes>
    </test>
    <i>
        <m Condition="'%(test.yes)'=='1'">m1</m>
    </i>
</ItemDefinitionGroup>

V tomto příkladu odkazuje položka "i" zboží "test" v podmínce.

Potlačení a odstranění metadat

Metadata, které jsou definovány v prvku ItemDefinitionGroup lze přepsat novější ItemDefinitionGroup prvku nastavením hodnoty metadat na prázdné.Metadata položky lze také účinně odstranit nastavením na prázdnou hodnotu.Příklad:

<ItemDefinitionGroup>
    <i>
        <m>m1</m>
    </i>
</ItemDefinitionGroup>
<ItemDefinitionGroup>
    <i>
        <m></m>
    </i>
</ItemDefinitionGroup>

Položka "i" stále obsahuje metadata "m", ale jeho hodnota je prázdný.

Obor metadat

ItemDefinitionGroups mají globální rozsah na vlastnosti definované a globální všude, kde jsou definovány.Výchozí definice metadat v ItemDefinitionGroup lze odkazovat.Například následující používá metadata jednoduchý odkaz:

<ItemDefinitionGroup>
    <i>
        <m>m1</m>
        <m>%(m);m2</m>
    </i>
</ItemDefinitionGroup>

Kvalifikovaný metadata odkazu lze také:

<ItemDefinitionGroup>
    <i>
      <m>m1</m>
      <m>%(i.m);m2</m>
    </i>
</ItemDefinitionGroup>

Následující je však není platný:

<ItemDefinitionGroup>
    <i>
        <m>m1</m>
        <m>@(x)</m>
    </i>
</ItemDefinitionGroup>

V MSBuild 3.5 ItemGroups může být také odkazující na sebe.Příklad:

<ItemGroup>
    <item Include="a">
        <m>m1</m>
        <m>%(m);m2</m>
    </item>
</ItemGroup>

Viz také

Koncepty

Nástroj MSBuild dávkování