Udostępnij za pośrednictwem


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

Item — Element (MSBuild)

Koncepcje

Definicje elementów

Przetwarzanie wsadowe w programie MSBuild

Inne zasoby

Pojęcia dotyczące programu MSBuild

MSBuild