Elementy programu MSBuild
MSBuild elementy są wejścia do kompilacji systemu i zazwyczaj reprezentują pliki.Elementy są pogrupowane w typy elementów, na podstawie ich nazw elementu.Typy elementów są o nazwie listy elementów, które mogą być używane jako parametry dla zadania.Zadania użyj wartości elementu kroki procesu tworzenia.
Ponieważ elementy są reprezentowane przez typ elementu, do którego należą, pozycja"warunki" i "wartość elementu" można zamiennie.
W tym temacie
Tworzenie elementów w pliku projektu
Tworzenie elementów podczas wykonywania
Odwoływanie się do elementów w pliku projektu
Przy użyciu symboli wieloznacznych, aby określić elementy
Za pomocą atrybutu wykluczania
Element metadanych
Odwoływanie się do metadanych elementu w pliku projektu
Dobrze znane metadanych elementu
Przekształcanie typów elementów przy użyciu metadanych
Definicje przedmiotu
Atrybuty dla elementów ItemGroup z elementu docelowego
Usuń atrybut
Atrybut KeepMetadata
Atrybut RemoveMetadata
Atrybut KeepDuplicates
Tworzenie elementów w pliku projektu
Deklaruj elementy w pliku projektu jako podrzędne elementy ItemGroup element.Nazwa elementu podrzędnego jest typ elementu.Include Elementu określa elementy (pliki) zostanie uwzględniona w tego typu elementu.Na przykład, następujący kod XML tworzy typ elementu o nazwie Compile, który zawiera dwa pliki.
<ItemGroup>
<Compile Include = "file1.cs"/>
<Compile Include = "file2.cs"/>
</ItemGroup>
Element "file2.cs" nie zastąpić elementu "file1.cs"; Zamiast tego, nazwa pliku jest dołączana do listy wartości dla Compile item type.Podczas fazy oceny kompilacji, nie można usunąć element z typu elementu.
Następujące XML tworzy ten sam typ elementu, oświadczając, oba pliki w jednym Include atrybut.Należy zauważyć, że nazwy plików są oddzielone średnikami.
<ItemGroup>
<Compile Include = "file1.cs;file2.cs"/>
</ItemGroup>
Tworzenie elementów podczas wykonywania
Elementy, które są poza Cel elementy są przypisane wartości podczas fazy oceny kompilacji.Podczas fazy realizacji kolejnych elementów może zostać utworzona lub zmodyfikowana w następujący sposób:
Każde zadanie wyemitować elementu.Emitować element, zadanie element musi mieć element podrzędny produkcji element, który ma ItemName atrybut.
CreateItem zadanie wyemitować elementu.To użycie jest niezalecane.
Począwszy od 3,5.NET Framework, Target elementy mogą zawierać ItemGroup elementów, które mogą zawierać element elementów.
Odwoływanie się do elementów w pliku projektu
Aby odwołać typów elementów w całym pliku projektu, należy użyć składni @(ItemType).Na przykład, czy odwołanie typu elementu w poprzednim przykładzie za pomocą @(Compile).Przy użyciu następującej składni, elementy można przekazać do zadania, określając typ elementu jako parametr danego zadania.Aby uzyskać więcej informacji, zobacz Porady: wybieranie plików do kompilacji.
Domyślnie elementy typu elementu są oddzielone średnikami (;), gdy jest rozwinięty.Można używać składni @(ItemType, "separatora") do określenia separator inną niż domyślna.Aby uzyskać więcej informacji, zobacz Porady: wyświetlanie listy elementów rozdzielanych przecinkami.
Przy użyciu symboli wieloznacznych, aby określić elementy
Można użyć **, *, i?znaków wieloznacznych, aby określić grupę plików jako nakłady dla budowania zamiast aukcji każdego pliku osobno.
?symbol wieloznaczny dopasowuje pojedynczy znak.
* Symbol wieloznaczny dopasowuje zero lub więcej znaków.
** Sekwencję znaków wieloznacznych pasuje częociową ocieżkę.
Na przykład można określić wszystkie pliki .cs w katalogu, który zawiera plik projektu przy użyciu następującego elementu w pliku projektu.
<CSFile Include="*.cs"/>
Następujący element zaznacza wszystkie pliki .vb na dysku D::
<VBFile Include="D:/**/*.vb"/>
Aby uzyskać więcej informacji na temat znaków wieloznacznych, zobacz Porady: wybieranie plików do kompilacji.
Za pomocą atrybutu wykluczania
Element elementy mogą zawierać Exclude atrybut, który wyklucza określonych elementów (pliki) z typu elementu.Exclude Atrybut jest zazwyczaj używany wraz z wieloznacznych.Na przykład, następujący kod XML dodaje każdy plik CS w katalogu typ elementu CSFile z wyjątkiem DoNotBuild.cs pliku.
<ItemGroup>
<CSFile Include="*.cs" Exclude="DoNotBuild.cs"/>
</ItemGroup>
Exclude Atrybut dotyczy tylko te elementy, które są dodawane przez Include atrybutu w elemencie elementu, który zawiera oba te.Poniższy przykład nie wyklucza pliku Form1.cs, który został dodany w elemencie elementu.
<Compile Include="*.cs" />
<Compile Include="*.res" Exclude="Form1.cs">
Aby uzyskać więcej informacji, zobacz Porady: wykluczanie plików z kompilacji.
Element metadanych
Elementy mogą zawierać metadane w uzupełnieniu do informacji w Include i Exclude atrybuty.Metadane można za pomocą zadań, które wymagają więcej informacji o zapasach lub zadania wsadowego i cele.Aby uzyskać więcej informacji, zobacz Przetwarzanie wsadowe w programie MSBuild.
Metadane jest zbiorem par klucz wartość, które są zadeklarowane w pliku projektu jako elementy podrzędne elementu element.Nazwa elementu podrzędnego jest nazwa metadane i element podrzędny wartość wartość metadanych.
Metadane są skojarzone z elementem element, który go zawiera.Na przykład, następujący kod XML dodaje Culture metadanych, który ma wartość Fr "one.cs" i "two.cs" pozycji CSFile item type.
<ItemGroup>
<CSFile Include="one.cs;two.cs">
<Culture>Fr</Culture>
</CSFile>
</ItemGroup>
Element może mieć zero lub więcej wartości metadanych.W każdej chwili można zmienić wartości metadanych.Jeśli metadanych jest ustawiona na wartość pustą, skutecznie usunąć z budować.
Odwoływanie się do metadanych elementu w pliku projektu
Element metadanych w całym pliku projektu można się odwoływać za pomocą składni %(ItemMetadataName).Jeśli istnieje niejednoznaczności, mogą kwalifikować się odwołanie za pomocą nazwy typu elementu.Dwudniowe, można określić %(,ItemType.ItemMetaDataName).W poniższym przykładzie użyto Wyświetla metadane do przetwarzania wsadowego zadanie wiadomości.Aby uzyskać więcej informacji na temat używania metadanych elementu do dozowania, zobacz Metadane elementu w przetwarzaniu wsadowym zadań.
<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>
Dobrze znane metadanych elementu
Gdy element zostanie dodany do typu elementu, że zostanie przypisany niektórych znanych metadane.Na przykład, wszystkie elementy mają znanych metadane %(Filename), którego wartością jest nazwa pliku elementu.Aby uzyskać więcej informacji, zobacz Metadane dobrze znanego elementu MSBuild.
Przekształcanie typów elementów przy użyciu metadanych
Za pomocą metadanych można przekształcić list elementów do nowego elementu listy.Na przykład, można przekształcać typu elementu CppFiles który ma elementy, które reprezentują pliki .cpp do odpowiedniej listy .obj plików za pomocą wyrażenia @(CppFiles -> '%(Filename).obj').
Poniższy kod tworzy CultureResource item type, zawierającą kopie wszystkich EmbeddedResource elementy, które Culture metadanych.Culture Wartość metadane staje się wartością nowe metadane CultureResource.TargetDirectory.
<Target Name="ProcessCultureResources">
<ItemGroup>
<CultureResource Include="@(EmbeddedResource)"
Condition="'%(EmbeddedResource.Culture)' != ''">
<TargetDirectory>%(EmbeddedResource.Culture) </TargetDirectory>
</CultureResource>
</ItemGroup>
</Target>
Aby uzyskać więcej informacji, zobacz Przekształcenia w programie MSBuild.
Definicje przedmiotu
Począwszy od 3,5.NET Framework, można dodać metadane domyślne do elementów dowolnego typu za pomocą elementu ItemDefinitionGroup.Jak dobrze znanych metadanych metadane domyślne wiąże się z wszystkich elementów typu elementu, który określisz.Jawnie można zastąpić domyślną metadanych w definicji elementu.Na przykład, następujący kod XML daje Compile pozycji "one.cs" i "three.cs" metadane BuildDay z wartością "Poniedziałek".Kod daje metadanych elementu "two.cs" BuildDay z wartością "Wtorek".
<ItemDefinitionGroup>
<Compile>
<BuildDay>Monday</BuildDay>
</Compile>
</ItemDefinitionGroup>
<ItemGroup>
<Compile Include="one.cs;three.cs" />
<Compile Include="two.cs">
<BuildDay>Tuesday</BuildDay>
</Compile>
</ItemGroup>
Aby uzyskać więcej informacji, zobacz Definicje elementów.
Atrybuty dla elementów ItemGroup z elementu docelowego
Począwszy od 3,5.NET Framework, Target elementy mogą zawierać ItemGroup elementów, które mogą zawierać element elementów.Atrybuty w tej sekcji są ważne w przypadku, gdy są one określone dla danego towaru w ItemGroup w Target.
Usuń atrybut
Elementy w ItemGroup miejsce docelowe mogą zawierać Remove atrybut, który usuwa określone elementy (pliki) z typu elementu.Ten atrybut został wprowadzony w.NET Framework 3.5.
Poniższy przykład usuwa każdy plik .config z kompilacji typu elementu.
<Target>
<ItemGroup>
<Compile Remove="*.config"/>
</ItemGroup>
</Target>
Atrybut KeepMetadata
Jeśli element zostanie wygenerowany wewnątrz elementu docelowego, może zawierać elementu element KeepMetadata atrybut.Jeśli ten atrybut jest określony, zostanie przekazany tylko metadane, które określono w rozdzielaną średnikami listę nazw z elementu źródłowego do elementu docelowego.Pusta wartość dla tego atrybutu jest równoważne nie określając go.KeepMetadata Atrybut został wprowadzony w 4.5.NET Framework.
Poniższy przykład ilustruje sposób użycia KeepMetadata atrybut.
<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:
-->
Atrybut RemoveMetadata
Jeśli element zostanie wygenerowany wewnątrz elementu docelowego, może zawierać elementu element RemoveMetadata atrybut.Jeśli ten atrybut jest określony, wszystkie metadane jest przenoszona z elementu źródłowego do elementu docelowego, z wyjątkiem metadanych których nazwy są zawarte w rozdzielaną średnikami listę nazw.Pusta wartość dla tego atrybutu jest równoważne nie określając go.RemoveMetadata Atrybut został wprowadzony w 4.5.NET Framework.
Poniższy przykład ilustruje sposób użycia RemoveMetadata atrybut.
<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:
-->
Atrybut KeepDuplicates
Jeśli element zostanie wygenerowany wewnątrz elementu docelowego, może zawierać elementu element KeepDuplicates atrybut.KeepDuplicatesjest Boolean atrybut, który określa, czy element należy dodać do grupy docelowej, jeśli elementu jest identyczna z istniejącego elementu.
Jeśli element źródłowy i docelowy mają tę samą wartość Include, ale różne metadane, element jest dodawany nawet wtedy, gdy KeepDuplicates jest ustawiona na false.Pusta wartość dla tego atrybutu jest równoważne nie określając go.KeepDuplicates Atrybut został wprowadzony w 4.5.NET Framework.
Poniższy przykład ilustruje sposób użycia KeepDuplicates atrybut.
<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
-->
Zobacz też
Zadania
Porady: wybieranie plików do kompilacji
Porady: wykluczanie plików z kompilacji
Porady: wyświetlanie listy elementów rozdzielanych przecinkami
Informacje
Koncepcje
Przetwarzanie wsadowe w programie MSBuild