Samouczek: korzystanie z programu MSBuild

MSBuild to platforma kompilacji dla firmy Microsoft i programu Visual Studio. W tym samouczku przedstawiono bloki konstrukcyjne programu MSBuild i pokazano, jak pisać, manipulować i debugować projekty MSBuild. Zapoznasz się z informacjami na temat następujących zagadnień:

  • Tworzenie pliku projektu i manipulowanie nim.

  • Jak używać właściwości kompilacji.

  • Jak używać elementów kompilacji.

Program MSBuild można uruchomić z poziomu programu Visual Studio lub w oknie poleceń. W tym samouczku utworzysz plik projektu MSBuild przy użyciu programu Visual Studio. Edytujesz plik projektu w programie Visual Studio i użyj okna poleceń, aby skompilować projekt i zbadać wyniki.

Instalowanie programu MSBuild

Jeśli masz program Visual Studio, masz już zainstalowany program MSBuild. Program Visual Studio 2019 lub nowszy jest instalowany w folderze instalacyjnym programu Visual Studio. W przypadku typowej instalacji domyślnej w systemie Windows 10 plik MSBuild.exe znajduje się w folderze instalacyjnym MSBuild \Current\Bin.

Upewnij się, że w instalatorze wybrano narzędzia MSBuild dla używanych obciążeń, a następnie wybierz pozycję Zainstaluj.

Installing MSBuild

Aby zainstalować program MSBuild w systemie, który nie ma programu Visual Studio, przejdź do pozycji Build Tools for Visual Studio 2019 lub zainstaluj zestaw .NET SDK.

Jeśli masz program Visual Studio, masz już zainstalowany program MSBuild. Program Visual Studio 2022 jest instalowany w folderze instalacyjnym programu Visual Studio. W przypadku typowej instalacji domyślnej w systemie Windows 10 plik MSBuild.exe znajduje się w folderze instalacyjnym MSBuild \Current\Bin.

W instalatorze programu Visual Studio przejdź do obszaru Poszczególne składniki i znajdź pole wyboru MSBuild. Jest on wybierany automatycznie po wybraniu dowolnego z innych obciążeń do zainstalowania.

Aby zainstalować program MSBuild w systemie, który nie ma programu Visual Studio, przejdź do pozycji Build Tools for Visual Studio 2022 na stronie pobierania. Innym sposobem uzyskania programu MSBuild jest zainstalowanie zestawu .NET SDK.

Tworzenie projektu MSBuild

System projektu programu Visual Studio jest oparty na programie MSBuild. Tworzenie nowego pliku projektu przy użyciu programu Visual Studio jest łatwe. W tej sekcji utworzysz plik projektu w języku C#. Zamiast tego możesz utworzyć plik projektu Visual Basic. W kontekście tego samouczka różnica między dwoma plikami projektu jest niewielka.

Aby utworzyć plik projektu

  1. Otwórz program Visual Studio i utwórz projekt:

    W polu wyszukiwania wpisz winforms, a następnie wybierz pozycję Utwórz nową aplikację Windows Forms (.NET Framework). W wyświetlonym oknie dialogowym wybierz pozycję Utwórz.

    W polu Nazwa projektu wpisz BuildApp. Wprowadź lokalizację rozwiązania, na przykład D:\.

  2. Kliknij przycisk OK lub Utwórz , aby utworzyć plik projektu.

Sprawdzanie pliku projektu

W poprzedniej sekcji użyto programu Visual Studio do utworzenia pliku projektu w języku C#. Plik projektu jest reprezentowany w Eksplorator rozwiązań przez węzeł projektu o nazwie BuildApp. Edytor kodu programu Visual Studio umożliwia sprawdzenie pliku projektu.

Aby zbadać plik projektu

  1. W Eksplorator rozwiązań kliknij węzeł projektu BuildApp.

  2. W przeglądarce Właściwości zwróć uwagę, że właściwość Plik projektu to BuildApp.csproj. Wszystkie pliki projektu mają nazwę z sufiksem proj. Jeśli projekt Języka Visual Basic został utworzony, nazwa pliku projektu to BuildApp.vbproj.

  3. Ponownie kliknij prawym przyciskiem myszy węzeł projektu, a następnie kliknij polecenie Edytuj kompilacjęApp.csproj.

    Plik projektu zostanie wyświetlony w edytorze kodu.

Uwaga

W przypadku niektórych typów projektów, takich jak C++, należy zwolnić projekt (kliknij prawym przyciskiem myszy plik projektu i wybierz polecenie Zwolnij projekt), zanim będzie można otworzyć i edytować plik projektu.

Cele i zadania

Pliki projektu to pliki w formacie XML z projektem węzła głównego.

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0"  xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

Większość projektów platformy .NET ma Sdk atrybut . Te projekty są nazywane projektami w stylu zestawu SDK.

<Project Sdk="Microsoft.NET.Sdk">

Istnieje wiele odmian zestawów SDK platformy .NET w celach specjalnych; zostały one opisane w temacie Zestawy SDK projektu .NET.

Prace nad tworzeniem aplikacji są wykonywane przy użyciu elementów Target i Task .

  • Zadanie to najmniejsza jednostka pracy, czyli "atom" kompilacji. Zadania to niezależne składniki wykonywalne, które mogą zawierać dane wejściowe i wyjściowe. W pliku projektu nie ma obecnie żadnych odwołań ani nie zdefiniowano żadnych zadań. Zadania są dodawane do pliku projektu w poniższych sekcjach. Aby uzyskać więcej informacji, zobacz Zadania.

  • Element docelowy to nazwana sekwencja zadań. Może to być nazwana sekwencja zadań, ale krytycznie reprezentuje coś do skompilowania lub wykonania, więc należy go zdefiniować w sposób zorientowany na cel. Aby uzyskać więcej informacji, zobacz Cele.

Domyślny element docelowy nie jest zdefiniowany w pliku projektu. Zamiast tego jest określony w importowanych projektach. Element Import określa zaimportowane projekty. Na przykład w projekcie języka C# domyślny element docelowy jest importowany z pliku Microsoft.CSharp.targets.

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

Zaimportowane pliki są skutecznie wstawiane do pliku projektu, gdziekolwiek się odwołujeją.

W projektach w stylu zestawu SDK nie widać tego elementu importu, ponieważ atrybut zestawu SDK powoduje, że ten plik jest importowany niejawnie.

Program MSBuild śledzi cele kompilacji i gwarantuje, że każdy element docelowy jest kompilowany nie więcej niż raz.

Dodawanie elementu docelowego i zadania

Dodaj element docelowy do pliku projektu. Dodaj zadanie do miejsca docelowego, które wyświetla komunikat.

Aby dodać element docelowy i zadanie

  1. Dodaj te wiersze do pliku projektu tuż po instrukcji Import lub otwarciu elementu project.

    <Target Name="HelloWorld">
    </Target>
    

    Ten kod tworzy obiekt docelowy o nazwie HelloWorld. Zwróć uwagę, że podczas edytowania pliku projektu masz obsługę funkcji IntelliSense.

  2. Dodaj wiersze do obiektu docelowego HelloWorld, aby wynikowa sekcja wyglądała następująco:

    <Target Name="HelloWorld">
      <Message Text="Hello"></Message>  <Message Text="World"></Message>
    </Target>
    
  3. Zapisz plik projektu.

Zadanie Message jest jednym z wielu zadań dostarczanych z programem MSBuild. Aby uzyskać pełną listę dostępnych zadań i informacji o użyciu, zobacz Informacje o zadaniu.

Zadanie Message przyjmuje wartość ciągu atrybutu Text jako dane wejściowe i wyświetla je na urządzeniu wyjściowym (lub zapisuje je w co najmniej jednym dzienniku, jeśli ma to zastosowanie). Obiekt docelowy HelloWorld wykonuje zadanie Komunikat dwa razy: najpierw wyświetla komunikat "Hello", a następnie wyświetla komunikat "World".

Kompilowanie obiektu docelowego

Jeśli spróbujesz skompilować ten projekt z poziomu programu Visual Studio, nie skompiluje zdefiniowanego obiektu docelowego. Dzieje się tak, ponieważ program Visual Studio wybiera domyślny element docelowy, który nadal znajduje się w zaimportowanych .targets plikach.

Uruchom program MSBuild z poziomu wiersza polecenia dla deweloperów dla programu Visual Studio, aby skompilować wcześniej zdefiniowany element docelowy HelloWorld. Użyj przełącznika wiersza polecenia -target lub -t, aby wybrać element docelowy.

Uwaga

W poniższych sekcjach zostanie wyświetlony wiersz polecenia dla deweloperów.

Aby skompilować element docelowy:

  1. Otwórz okno polecenia.

    W polu wyszukiwania na pasku zadań zacznij wpisywać nazwę narzędzia, na przykład dev lub developer command prompt. Spowoduje to wyświetlenie listy zainstalowanych aplikacji pasujących do wzorca wyszukiwania.

    Jeśli musisz go znaleźć ręcznie, plik to LaunchDevCmd.bat w folderze instalacyjnym {Visual Studio}\Common7\Tools .

  2. W oknie polecenia przejdź do folderu zawierającego plik projektu, w tym przypadku D:\BuildApp\BuildApp.

  3. Uruchom program msbuild za pomocą przełącznika -t:HelloWorldpoleceń . To polecenie wybiera i kompiluje element docelowy HelloWorld:

    msbuild buildapp.csproj -t:HelloWorld
    
  4. Sprawdź dane wyjściowe w oknie Polecenia. Powinny zostać wyświetlone dwa wiersze "Hello" i "World":

    Hello
    World
    

Uwaga

Jeśli zamiast tego zobaczysz The target "HelloWorld" does not exist in the project , prawdopodobnie nie pamiętasz zapisywania pliku projektu w edytorze kodu. Zapisz plik i spróbuj ponownie.

Naprzemiennie między edytorem kodu a oknem poleceń można zmienić plik projektu i szybko wyświetlić wyniki.

Właściwości kompilacji

Właściwości kompilacji to pary nazwa-wartość, które prowadzą kompilację. Kilka właściwości kompilacji jest już zdefiniowanych w górnej części pliku projektu:

<PropertyGroup>
...
  <ProductVersion>10.0.11107</ProductVersion>
  <SchemaVersion>2.0</SchemaVersion>
  <ProjectGuid>{30E3C9D5-FD86-4691-A331-80EA5BA7E571}</ProjectGuid>
  <OutputType>WinExe</OutputType>
...
</PropertyGroup>

Wszystkie właściwości to elementy podrzędne elementów PropertyGroup. Nazwa właściwości jest nazwą elementu podrzędnego, a wartość właściwości jest elementem tekstowym elementu podrzędnego. Przykład:

<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>

definiuje właściwość o nazwie TargetFrameworkVersion, nadając jej wartość ciągu "v4.5".

Właściwości kompilacji można ponownie zdefiniować w dowolnym momencie. If

<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

pojawi się później w pliku projektu lub w pliku zaimportowanym później w pliku projektu, a następnie TargetFrameworkVersion przyjmuje nową wartość "v3.5".

Badanie wartości właściwości

Aby uzyskać wartość właściwości, użyj następującej składni, gdzie PropertyName jest nazwą właściwości:

$(PropertyName)

Użyj tej składni, aby zbadać niektóre właściwości w pliku projektu.

Aby sprawdzić wartość właściwości

  1. W edytorze kodu zastąp element docelowy HelloWorld następującym kodem:

    <Target Name="HelloWorld">
      <Message Text="Configuration is $(Configuration)" />
      <Message Text="MSBuildToolsPath is $(MSBuildToolsPath)" />
    </Target>
    
  2. Zapisz plik projektu.

  3. W oknie polecenia wprowadź i wykonaj następujący wiersz:

    msbuild buildapp.csproj -t:HelloWorld
    
  4. Sprawdź dane wyjściowe. Powinny zostać wyświetlone te dwa wiersze (dane wyjściowe mogą się różnić):

    Configuration is Debug
    MSBuildToolsPath is C:\Program Files\Microsoft Visual Studio\2022\MSBuild\Current\Bin\amd64
    
    Configuration is Debug
    MSBuildToolsPath is C:\Program Files (x86)\Microsoft Visual Studio\2019\MSBuild\16.0\Bin
    

Właściwości warunkowe

Wiele właściwości, takich jak Configuration , są definiowane warunkowo, czyli Condition atrybut pojawia się w elemecie właściwości. Właściwości warunkowe są definiowane lub ponownie definiowane tylko wtedy, gdy warunek ma wartość "true". Niezdefiniowane właściwości mają wartość domyślną pustego ciągu. Przykład:

<Configuration   Condition=" '$(Configuration)' == '' ">Debug</Configuration>

oznacza "Jeśli właściwość Configuration nie została jeszcze zdefiniowana, zdefiniuj ją i nadaj jej wartość "Debuguj".

Prawie wszystkie elementy MSBuild mogą mieć atrybut Condition. Aby uzyskać więcej informacji na temat używania atrybutu Warunek, zobacz Warunki.

Właściwości zarezerwowane

Program MSBuild rezerwuje niektóre nazwy właściwości do przechowywania informacji o pliku projektu i plikach binarnych MSBuild. MSBuildToolsPath jest przykładem właściwości zarezerwowanej. Do właściwości zarezerwowanych odwołuje się notacja $ jak każda inna właściwość. Aby uzyskać więcej informacji, zobacz How to: Reference the name or location of the project file and MSBuild reserved and well-known properties (Jak odwoływać się do nazwy lub lokalizacji pliku projektu) oraz MSBuild reserved i dobrze znanych właściwości.

Zmienne środowiskowe

Zmienne środowiskowe można odwoływać się w plikach projektu tak samo jak właściwości kompilacji. Aby na przykład użyć zmiennej środowiskowej PATH w pliku projektu, użyj zmiennej $(Path). Jeśli projekt zawiera definicję właściwości, która ma taką samą nazwę jak zmienna środowiskowa, właściwość w projekcie zastępuje wartość zmiennej środowiskowej. Aby uzyskać więcej informacji, zobacz Instrukcje: używanie zmiennych środowiskowych w kompilacji.

Ustawianie właściwości z wiersza polecenia

Właściwości można zdefiniować w wierszu polecenia przy użyciu przełącznika wiersza polecenia -property lub -p. Wartości właściwości odebrane z wiersza polecenia zastępują wartości właściwości ustawione w pliku projektu i zmiennych środowiskowych.

Aby ustawić wartość właściwości z wiersza polecenia:

  1. W oknie polecenia wprowadź i wykonaj następujący wiersz:

    msbuild buildapp.csproj -t:HelloWorld -p:Configuration=Release
    
  2. Sprawdź dane wyjściowe. Powinien zostać wyświetlony następujący wiersz:

    Configuration is Release.
    

Program MSBuild tworzy właściwość Configuration i nadaje jej wartość "Release".

Znaki specjalne

Niektóre znaki mają specjalne znaczenie w plikach projektu MSBuild. Przykłady tych znaków obejmują średniki (;) i gwiazdki (*). Aby użyć tych znaków specjalnych jako literałów w pliku projektu, należy je określić przy użyciu składni %<xx>, gdzie <xx> reprezentuje wartość szesnastkowa ASCII znaku.

Zmień zadanie Komunikat, aby wyświetlić wartość właściwości Konfiguracja ze znakami specjalnymi, aby była bardziej czytelna.

Aby użyć znaków specjalnych w zadaniu Komunikat:

  1. W edytorze kodu zastąp oba zadania komunikatów następującym wierszem:

    <Message Text="%24(Configuration) is %22$(Configuration)%22" />
    
  2. Zapisz plik projektu.

  3. W oknie polecenia wprowadź i wykonaj następujący wiersz:

    msbuild buildapp.csproj -t:HelloWorld
    
  4. Sprawdź dane wyjściowe. Powinien zostać wyświetlony następujący wiersz:

    $(Configuration) is "Debug"
    

Aby uzyskać więcej informacji, zobacz znaki specjalne programu MSBuild.

Kompilowanie elementów

Element jest elementem informacji, zazwyczaj nazwą pliku, która jest używana jako dane wejściowe w systemie kompilacji. Na przykład kolekcja elementów reprezentujących pliki źródłowe może zostać przekazana do zadania o nazwie Compile w celu skompilowania ich do zestawu.

Wszystkie elementy to elementy podrzędne elementów ItemGroup. Nazwa elementu jest nazwą elementu podrzędnego, a wartość elementu jest wartością atrybutu Include elementu podrzędnego. Wartości elementów o tej samej nazwie są zbierane w typy elementów tej nazwy. Przykład:

<ItemGroup>
    <Compile Include="Program.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>

definiuje grupę elementów zawierającą dwa elementy. Typ elementu Compile ma dwie wartości: Program.cs i Properties\AssemblyInfo.cs.

Poniższy kod tworzy ten sam typ elementu, deklarując oba pliki w jednym Include atrybucie oddzielone średnikiem.

<ItemGroup>
    <Compile Include="Program.cs;Properties\AssemblyInfo.cs" />
</ItemGroup>

Aby uzyskać więcej informacji, zobacz Elementy.

Uwaga

Ścieżki plików są powiązane z folderem zawierającym plik projektu MSBuild, nawet jeśli plik projektu jest zaimportowanym plikiem projektu. Istnieje kilka wyjątków, takich jak w przypadku używania elementów Import i UsingTask .

Sprawdzanie wartości typu elementu

Aby uzyskać wartości typu elementu, użyj następującej składni, gdzie ItemType jest nazwą typu elementu:

@(ItemType)

Ta składnia służy do badania Compile typu elementu w pliku projektu.

Aby zbadać wartości typów elementów:

  1. W edytorze kodu zastąp zadanie docelowe HelloWorld następującym kodem:

    <Target Name="HelloWorld">
      <Message Text="Compile item type contains @(Compile)" />
    </Target>
    
  2. Zapisz plik projektu.

  3. W oknie polecenia wprowadź i wykonaj następujący wiersz:

    msbuild buildapp.csproj -t:HelloWorld
    
  4. Sprawdź dane wyjściowe. Powinna zostać wyświetlona ta długa linia:

    Compile item type contains Form1.cs;Form1.Designer.cs;Program.cs;Properties\AssemblyInfo.cs;Properties\Resources.Designer.cs;Properties\Settings.Designer.cs
    

Wartości typu elementu są domyślnie oddzielone średnikami.

Aby zmienić separator typu elementu, użyj następującej składni, gdzie ItemType jest typem elementu, a Separator jest ciągiem jednego lub kilku znaków oddzielających:

@(ItemType, Separator)

Zmień zadanie Komunikat, aby używać powrotów karetki i kanałów informacyjnych wierszy (%0A%0D), aby wyświetlić polecenie Skompiluj elementy jeden na wiersz.

Aby wyświetlić wartości typu elementu jeden na wiersz

  1. W edytorze kodu zastąp zadanie Komunikat następującym wierszem:

    <Message Text="Compile item type contains @(Compile, '%0A%0D')" />
    
  2. Zapisz plik projektu.

  3. W oknie polecenia wprowadź i wykonaj następujący wiersz:

    msbuild buildapp.csproj -t:HelloWorld
    
  4. Sprawdź dane wyjściowe. Powinny zostać wyświetlone następujące wiersze:

    Compile item type contains Form1.cs
    Form1.Designer.cs
    Program.cs
    Properties\AssemblyInfo.cs
    Properties\Resources.Designer.cs
    Properties\Settings.Designer.cs
    

Dołączanie, wykluczanie i symbole wieloznaczne

Możesz użyć symboli wieloznacznych "*", "**" i "?" z atrybutem Include, aby dodać elementy do typu elementu. Przykład:

<Photos Include="images\*.jpeg" />

dodaje wszystkie pliki z rozszerzeniem pliku jpeg w folderze images do typu elementu Zdjęcia, podczas gdy

<Photos Include="images\**\*.jpeg" />

Dodaje wszystkie pliki z rozszerzeniem pliku jpeg w folderze images i wszystkie jego podfoldery do typu elementu Zdjęcia. Aby uzyskać więcej przykładów, zobacz Instrukcje: wybieranie plików do skompilowania.

Zwróć uwagę, że w miarę deklarowanych elementów są one dodawane do typu elementu. Przykład:

<Photos Include="images\*.jpeg" />
<Photos Include="images\*.gif" />

Tworzy typ elementu o nazwie Zdjęcie, który zawiera wszystkie pliki w folderze images z rozszerzeniem .jpeg pliku lub .gif. Te wiersze są równoważne następującemu wierszowi:

<Photos Include="images\*.jpeg;images\*.gif" />

Element można wykluczyć z typu elementu za pomocą atrybutu Exclude . Przykład:

<Compile Include="*.cs" Exclude="*Designer*">

Dodaje wszystkie pliki z rozszerzeniem pliku cs do typu elementu Kompiluj, z wyjątkiem plików, których nazwy zawierają ciąg Projektant. Aby uzyskać więcej przykładów, zobacz How to: Exclude files from the build (Instrukcje: wykluczanie plików z kompilacji).

Atrybut Exclude ma wpływ tylko na elementy dodane przez atrybut Include w elemencie elementu, który zawiera je oba. Przykład:

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

Nie wyklucza pliku Form1.cs, który został dodany w poprzednim elemencie elementu.

Aby uwzględnić i wykluczyć elementy

  1. W edytorze kodu zastąp zadanie Komunikat następującym wierszem:

    <Message Text="XFiles item type contains @(XFiles)" />
    
  2. Dodaj tę grupę elementów tuż po elemencie Import:

    <ItemGroup>
       <XFiles Include="*.cs;properties/*.resx" Exclude="*Designer*" />
    </ItemGroup>
    
  3. Zapisz plik projektu.

  4. W oknie polecenia wprowadź i wykonaj następujący wiersz:

    msbuild buildapp.csproj -t:HelloWorld
    
  5. Sprawdź dane wyjściowe. Powinien zostać wyświetlony następujący wiersz:

    XFiles item type contains Form1.cs;Program.cs;Properties/Resources.resx
    

Metadane elementu

Elementy mogą zawierać metadane oprócz informacji zebranych z Include atrybutów i Exclude . Zadania wymagające więcej informacji o elementach niż tylko wartość elementu mogą używać tych metadanych.

Metadane elementu są deklarowane w pliku projektu, tworząc element o nazwie metadanych jako element podrzędny elementu. Element może mieć zero lub więcej wartości metadanych. Na przykład następujący element CSFile zawiera metadane kultury o wartości "Fr":

<ItemGroup>
    <CSFile Include="main.cs">
        <Culture>Fr</Culture>
    </CSFile>
</ItemGroup>

Aby uzyskać wartość metadanych typu elementu, użyj następującej składni, gdzie ItemType jest nazwą typu elementu, a MetaDataName jest nazwą metadanych:

%(ItemType.MetaDataName)

Aby zbadać metadane elementu:

  1. W edytorze kodu zastąp zadanie Komunikat następującym wierszem:

    <Message Text="Compile.DependentUpon: %(Compile.DependentUpon)" />
    
  2. Zapisz plik projektu.

  3. W oknie polecenia wprowadź i wykonaj następujący wiersz:

    msbuild buildapp.csproj -t:HelloWorld
    
  4. Sprawdź dane wyjściowe. Powinny zostać wyświetlone następujące wiersze:

    Compile.DependentUpon:
    Compile.DependentUpon: Form1.cs
    Compile.DependentUpon: Resources.resx
    Compile.DependentUpon: Settings.settings
    

Zwróć uwagę, że wyrażenie "Compile.DependentUpon" pojawia się kilka razy. Użycie metadanych z tą składnią w obiekcie docelowym powoduje "dzielenie na partie". Przetwarzanie wsadowe oznacza, że zadania w obiekcie docelowym są wykonywane raz dla każdej unikatowej wartości metadanych. Przetwarzanie wsadowe to odpowiednik skryptu MSBuild wspólnej konstrukcji programowania "foreach loop". Aby uzyskać więcej informacji, zobacz Batching (Przetwarzanie wsadowe).

Dobrze znane metadane

Za każdym razem, gdy element zostanie dodany do listy elementów, ten element zostanie przypisany do niektórych dobrze znanych metadanych. Na przykład %(Nazwa pliku) zwraca nazwę pliku dowolnego elementu. Aby uzyskać pełną listę dobrze znanych metadanych, zobacz Dobrze znane metadane elementów.

Aby sprawdzić dobrze znane metadane:

  1. W edytorze kodu zastąp zadanie Komunikat następującym wierszem:

    <Message Text="Compile Filename: %(Compile.Filename)" />
    
  2. Zapisz plik projektu.

  3. W oknie polecenia wprowadź i wykonaj następujący wiersz:

    msbuild buildapp.csproj -t:HelloWorld
    
  4. Sprawdź dane wyjściowe. Powinny zostać wyświetlone następujące wiersze:

    Compile Filename: Form1
    Compile Filename: Form1.Designer
    Compile Filename: Program
    Compile Filename: AssemblyInfo
    Compile Filename: Resources.Designer
    Compile Filename: Settings.Designer
    

Porównując poprzednie dwa przykłady, można zobaczyć, że chociaż nie każdy element w typie elementu kompilowania ma metadane ZależneOdpopowiedz, wszystkie elementy mają dobrze znane metadane nazwy pliku.

Przekształcenia metadanych

Listy elementów można przekształcić w nowe listy elementów. Aby przekształcić listę elementów, użyj następującej składni, gdzie <ItemType> jest nazwą typu elementu, a <MetadataName> jest nazwą metadanych:

@(ItemType -> '%(MetadataName)')

Na przykład listę elementów plików źródłowych można przekształcić w kolekcję plików obiektów przy użyciu wyrażenia, takiego jak @(SourceFiles -> '%(Filename).obj'). Aby uzyskać więcej informacji, zobacz Przekształcenia.

Aby przekształcić elementy przy użyciu metadanych:

  1. W edytorze kodu zastąp zadanie Komunikat następującym wierszem:

    <Message Text="Backup files: @(Compile->'%(filename).bak')" />
    
  2. Zapisz plik projektu.

  3. W oknie polecenia wprowadź i wykonaj następujący wiersz:

    msbuild buildapp.csproj -t:HelloWorld
    
  4. Sprawdź dane wyjściowe. Powinien zostać wyświetlony następujący wiersz:

    Backup files: Form1.bak;Form1.Designer.bak;Program.bak;AssemblyInfo.bak;Resources.Designer.bak;Settings.Designer.bak
    

Zwróć uwagę, że metadane wyrażone w tej składni nie powodują dzielenia na partie.

Następne kroki

Aby dowiedzieć się, jak utworzyć prosty plik projektu jeden krok naraz, w systemie Windows, wypróbuj tworzenie pliku projektu MSBuild od podstaw.

Jeśli używasz głównie zestawu SDK platformy .NET, zapoznaj się z tematem MSBuild Reference for .NET SDK Projects (Dokumentacja programu MSBuild dla projektów zestawu SDK platformy .NET).