Definicje elementów
MSBuild2.0 umożliwia deklaracji statycznych elementów w plikach programu project przy użyciu ItemGroup element.Jednak metadanych może zostać dodane tylko na poziomie elementu, nawet jeśli metadanych jest taka sama dla wszystkich elementów.Począwszy od MSBuild 3.5, element projektu o nazwie ItemDefinitionGroup pokonuje tego ograniczenia.ItemDefinitionGroupUmożliwia zdefiniowanie zbioru definicji elementu, które dodają wartości metadanych domyślne do wszystkich elementów w polu Typ nazwanego elementu.
ItemDefinitionGroup Element pojawia się natychmiast po Projekt element pliku projektu.Definicje przedmiotu zapewnia następujące funkcje:
Można zdefiniować globalna wartooć domyolna metadane dla elementów poza obiektu docelowego.To znaczy tych samych metadanych dotyczy wszystkich elementów określonego typu.
Typy elementów może istnieć wiele definicji.Gdy specyfikacje dodatkowe metadane zostaną dodane do typu, specyfikacja ostatni ma pierwszeństwo. (Metadane następuje z kolejnością importu następujące właściwości).
Metadane mogą być dodatku.Na przykład wartości CDefines są kumulowane warunkowo, w zależności od właściwości, które zostały ustawione.Na przykład: MT;STD_CALL;DEBUG;UNICODE.
Metadane mogą być usunięte.
Warunki może służyć do kontrolowania włączenia metadanych.
Element wartości domyślne metadanych
Metadanych elementu, która jest zdefiniowana w ItemDefinitionGroup jest po prostu deklarację domyślnej metadanych.Metadane nie ma zastosowania, chyba że zdefiniujesz elementu, który używa ItemGroup zawiera wartości metadanych.
[!UWAGA]
W wielu przykładach w tym temacie ItemDefinitionGroup element jest wyświetlany, ale jego odpowiednich definicji ItemGroup zostanie pominięty dla jasności.
Metadane jawnie zdefiniowana w ItemGroup ma pierwszeństwo przed metadanych w ItemDefinitionGroup.Metadane w ItemDefinitionGroup zostanie zastosowane tylko do niezdefiniowanej metadanych w ItemGroup.Na przykład:
<ItemDefinitionGroup>
<i>
<m>m1</m>
<n>n1</n>
</i>
</ItemDefinitionGroup>
<ItemGroup>
<i Include="a">
<o>o1</o>
<n>n2</n>
</i>
</ItemGroup>
W tym przykładzie metadanych domyślny "m" jest stosowany do elementu "i", ponieważ metadane "m" nie jest jawnie zdefiniowane przez element "i".Jednak domyślną metadanych "n" nie jest stosowane do elementu "i", ponieważ metadane "n" jest już zdefiniowany przez element "i".
[!UWAGA]
Nazwy elementów XML i parametr jest rozróżniana wielkość liter.Metadane elementu i nazwy elementu/właściwości nie jest rozróżniana.W związku z tym ItemDefinitionGroup elementy, które mają nazwy różniące się tylko wielkością liter powinny być traktowane jako sam ItemGroup.
Wartość źródła
Wartości dla metadanych, który jest zdefiniowany w ItemDefinitionGroup mogą pochodzić z wielu różnych źródeł, w następujący sposób:
Właściwość PropertyGroup
Element z ItemDefinitionGroup
Transformacji elementu na elemencie ItemDefinitionGroup
Zmienna środowiskowa
Właściwość globalna (z wiersza polecenia MSBuild.exe)
Właściwość zarezerwowane
Dobrze znane metadanych elementu z ItemDefinitionGroup
Sekcja CDATA <![CDATA [coś tu jest nie analizować]]>
[!UWAGA]
Metadanych elementu z ItemGroup nie jest przydatne w deklaracji ItemDefinitionGroup metadanych, ponieważ elementy ItemDefinitionGroup są przetwarzane przed ItemGroup elementy.
Dodatek i wiele definicji
Podczas dodawania definicji lub używania wielu ItemDefinitionGroups, należy pamiętać o następujących czynności:
Specyfikacja dodatkowe metadane jest dodane do typu.
Specyfikację ostatniego ma pierwszeństwo.
Kiedy masz wiele ItemDefinitionGroups każdej specyfikacji kolejnych dodaje jego metadane do poprzednich definicji.Na przykład:
<ItemDefinitionGroup>
<i>
<m>m1</m>
<n>n1</n>
</i>
</ItemDefinitionGroup>
<ItemDefinitionGroup>
<i>
<o>o1</o>
</i>
</ItemDefinitionGroup>
W tym przykładzie metadanych "o" dodaje się "m" i "n".
Ponadto można również dodawać metadane uprzednio zdefiniowane wartości.Na przykład:
<ItemDefinitionGroup>
<i>
<m>m1</m>
</i>
</ItemDefinitionGroup>
<ItemDefinitionGroup>
<i>
<m>%(m);m2</m>
</i>
</ItemDefinitionGroup>
W tym przykładzie uprzednio zdefiniowane wartości dla metadanych "m" (m1) dodaje się nową wartość (m2), aby ceny końcowej jest "m1; m2".
[!UWAGA]
Może to także wystąpić w samym ItemDefinitionGroup.
Aby zastąpić wcześniej zdefiniowanych metadanych, specyfikacja ostatni ma pierwszeństwo.W poniższym przykładzie wartość końcową metadanych "m" idzie z "m1" do "m1a".
<ItemDefinitionGroup>
<i>
<m>m1</m>
</i>
</ItemDefinitionGroup>
<ItemDefinitionGroup>
<i>
<m>m1a</m>
</i>
</ItemDefinitionGroup>
Używanie warunków w ItemDefinitionGroup
Warunki w ItemDefinitionGroup służy do kontrolowania włączenia metadanych.Na przykład:
<ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
<i>
<m>m1</m>
</i>
</ItemDefinitionGroup>
W tym przypadku metadanych domyślny "m1" na element "i" jest włączone tylko wtedy, gdy wartość właściwości "Konfiguracja" "Debugowanie".
[!UWAGA]
Tylko odwołania do metadanych lokalnego są obsługiwane w warunkach.
Odwołania do metadanych zdefiniowane w starszych ItemDefinitionGroup są lokalne do elementu, a nie grupy definicji.Oznacza to, że zakres odniesienia są specyficznych dla zapasu.Na przykład:
<ItemDefinitionGroup>
<test>
<yes>1</yes>
</test>
<i>
<m Condition="'%(test.yes)'=='1'">m1</m>
</i>
</ItemDefinitionGroup>
W tym przykładzie element "i" odwołania elementu "test" w warunku.
Zastępowanie i usuwanie metadanych
Metadane, zdefiniowane w elemencie ItemDefinitionGroup może być zastąpiona w elemencie ItemDefinitionGroup później przez ustawienie wartości metadanych na wartość pustą.Można również skutecznie usunąć element metadanych ustawiając wartość pustą.Na przykład:
<ItemDefinitionGroup>
<i>
<m>m1</m>
</i>
</ItemDefinitionGroup>
<ItemDefinitionGroup>
<i>
<m></m>
</i>
</ItemDefinitionGroup>
Element "i" nadal zawiera metadane "m", ale jego wartość jest teraz pusty.
Zakres metadanych
ItemDefinitionGroups mają globalny zakres na właściwości zdefiniowane i globalne wszędzie tam, gdzie są zdefiniowane.Definicje wartości Default metadanych w ItemDefinitionGroup może być wywoływało.Na przykład następujące używa odwołanie proste metadanych:
<ItemDefinitionGroup>
<i>
<m>m1</m>
<m>%(m);m2</m>
</i>
</ItemDefinitionGroup>
Można również zmienić odwołanie kwalifikowaną metadanych:
<ItemDefinitionGroup>
<i>
<m>m1</m>
<m>%(i.m);m2</m>
</i>
</ItemDefinitionGroup>
Jednakże następujące nie jest prawidłowy:
<ItemDefinitionGroup>
<i>
<m>m1</m>
<m>@(x)</m>
</i>
</ItemDefinitionGroup>
Począwszy od MSBuild 3.5, ItemGroups może być również wywoływało.Na przykład:
<ItemGroup>
<item Include="a">
<m>m1</m>
<m>%(m);m2</m>
</item>
</ItemGroup>