Megosztás a következőn keresztül:


Oktatóanyag: Az MSBuild használata

Az MSBuild a Microsoft és a Visual Studio buildplatformja, amely a legtöbb Visual Studio-projekt, köztük a .NET és a C++ projektek létrehozásához használható. Ez az oktatóanyag bemutatja az MSBuild építőelemeit, és megmutatja, hogyan írhat, módosíthat és végezhet hibakeresést MSBuild-projektekben. A következő tudnivalókat ismerheti meg:

  • Projektfájl létrehozása és módosítása.

  • Hogyan kell használni a build tulajdonságait.

  • Építőelemek használata.

Az MSBuild a Visual Studióból vagy a parancsablakból futtatható aMSBuild.exefuttatásával. Az MSBuild parancsablakból való futtatásának számos oka lehet, például ha olyan gépre szeretne építeni, amelyen nincs telepítve a Visual Studio, vagy olyan parancssori argumentumokat szeretne használni, amelyeket nem lehet beállítani a Visual Studio IDE-ben. A parancssorból futtatva például beállíthat bizonyos MSBuild tulajdonságokat, létrehozhat egy bináris naplót egy buildelési probléma hibakereséséhez, vagy futtathatja a build egy részhalmazát, például explicit módon futtathat egy adott buildcélt a teljes build helyett. Lásd: MSBuild parancssori referencia. A MSBuild.exe olyan gépekre is létrehozhatja, amelyeken nincs telepítve a teljes Visual Studio, például egy buildkiszolgálón, vagy egy folyamat tárolójába való bejelentkezéssel.

Ebben az oktatóanyagban egy MSBuild projektfájlt hoz létre a Visual Studióval. Szerkessze a projektfájlt a Visual Studióban, és használja a parancsablakot a projekt létrehozásához és az eredmények vizsgálatához.

Az MSBuild telepítése

Ha rendelkezik Visual Studióval, akkor már telepítve van az MSBuild. A Visual Studio 2019 és újabb verziói a Visual Studio telepítési mappájában vannak telepítve. A Windows 10 tipikus alapértelmezett telepítése esetén MSBuild.exe az MSBuild\Current\Bintelepítési mappájában található.

A telepítőben győződjön meg arról, hogy az MSBuild eszközök ki vannak választva a használt számítási feladatokhoz, és válassza a Telepítéslehetőséget.

MSBuild telepítése

Ha olyan rendszerre szeretné telepíteni az MSBuild alkalmazást, amely nem rendelkezik Visual Studióval, lépjen a Build Tools for Visual Studio 2019webhelyre a letöltések oldalán. Az MSBuild beszerzésének másik módja a .NET SDKtelepítése.

Ha rendelkezik Visual Studióval, akkor már telepítve van az MSBuild. A Visual Studio 2022 a Visual Studio telepítési mappájában van telepítve. A Windows 10 tipikus alapértelmezett telepítése esetén MSBuild.exe az MSBuild\Current\Bintelepítési mappájában található.

A Visual Studio telepítőjében lépjen az Egyéni összetevőkrészhez, és keresse meg az MSBuildjelölőnégyzetet. Automatikusan kiválasztásra kerül, ha a többi telepítendő számítási feladat közül választ.

Ha egy olyan rendszerre szeretné telepíteni az MSBuild-et, amely nem rendelkezik Visual Studio-val, lépjen a letöltési oldalra, és keresse meg a Buildeszközök a Visual Studio 2022-höz. Az MSBuild beszerzésének másik módja a .NET SDKtelepítése.

Ha rendelkezik Visual Studióval, akkor már telepítve van az MSBuild. A Visual Studio telepítési mappájában van telepítve. Windowson egy tipikus alapértelmezett telepítés esetén a MSBuild.exe az MSBuild\Current\Bin telepítési mappájában található.

Ha olyan rendszerre szeretné telepíteni az MSBuild alkalmazást, amely nem rendelkezik Visual Studióval, nyissa meg a Visual Studio>Build Tools for Visual Studio eszközt a Letöltések lapon. Az MSBuild beszerzésének másik módja a .NET SDKtelepítése.

MSBuild-projekt létrehozása

A Visual Studio projektrendszere az MSBuilden alapul. Egyszerűen létrehozhat egy új projektfájlt a Visual Studióval. Ebben a szakaszban egy C#-projektfájlt hoz létre. Ehelyett létrehozhat egy Visual Basic-projektfájlt. Az oktatóanyag kontextusában a két projektfájl közötti különbség kisebb. A C++ projekttípusok az itt leírtaktól eltérő buildinfrastruktúrát használnak. C++ projektek esetén lásd: Az MSBuild használata C++ projekt létrehozásához.

Projektfájl létrehozása

  1. Nyissa meg a Visual Studiót, és hozzon létre egy projektet:

    A keresőmezőbe írja be a winforms, majd válassza Új Windows Forms-alkalmazás (.NET-keretrendszer) létrehozása. A megjelenő párbeszédpanelen válassza a létrehozása lehetőséget.

    A Projektnév mezőbe írja be BuildApp. Adjon meg egy hely a megoldáshoz, például D:\.

  2. Kattintson OK vagy létrehozása gombra a projektfájl létrehozásához.

A projektfájl vizsgálata

Az előző szakaszban a Visual Studióval létrehozott egy C#-projektfájlt. A projektfájlt a BuildApp nevű projektcsomópont Megoldáskezelőben jeleníti meg. A Visual Studio kódszerkesztőjével megvizsgálhatja a projektfájlt.

A projektfájl vizsgálata

  1. A Megoldáskezelőbenkattintson a projekt csomópontra BuildApp.

  2. A Tulajdonságok böngészőben figyelje meg, hogy a Projektfájl tulajdonság BuildApp.csproj. Minden projektfájl neve projutótaggal vannak elnevezve. Ha létrehozott egy Visual Basic-projektet, a projektfájl neve BuildApp.vbprojlesz.

  3. Kattintson ismét a jobb gombbal a projektcsomópontra, majd kattintson BuildApp.csprojszerkesztése parancsra.

    A projektfájl megjelenik a kódszerkesztőben.

Jegyzet

Bizonyos projekttípusoknál, például a C++-hez, a projektfájl megnyitása és szerkesztése előtt ki kell ürítenie a projektet (kattintson a jobb gombbal a projektfájlra, és válassza a Projekt törlése) lehetőséget.

Cél és tevékenység hozzáadása

Ebben a szakaszban egy célhelyet ad hozzá a projektfájlhoz, amely üzenetet ír a build kimenetére. A következő szakasz rövid áttekintést nyújt az MSBuild projektfájlokban lévő célokról és feladatokról.

Célok és feladatok

A projektfájlok a Project gyökércsomóponttal rendelkező XML-fájlok.

A legtöbb .NET-projekt rendelkezik Sdk attribútummal. Ezeket a projekteket SDK-stílusú projekteknek nevezzük. Az SDK-ra való hivatkozás azt jelenti, hogy az MSBuild olyan fájlkészletet importál, amely biztosítja az adott SDK buildinfrastruktúráját. Ha nem hivatkozik egyetlen SDK-ra sem, továbbra is használhatja az MSBuildet, csak nem lesz automatikusan elérhető az összes SDK-specifikus tulajdonság és cél.

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

A .NET SDK-k számos változata létezik különleges célokra; ezeket .NET Project SDK-kismerteti.

Az alkalmazás létrehozása Cél és Tevékenység elemekkel történik.

  • A feladat a legkisebb munkaegység, más szóval a build "atomja". A feladatok független végrehajtható összetevők, amelyek bemenetekkel és kimenetekkel rendelkeznek. Jelenleg nincsenek hivatkozott vagy definiált tevékenységek a projektfájlban. A következő szakaszokban tevékenységeket adhat hozzá a projektfájlhoz. További információ: Feladatok.

  • A cél a buildelési utasításokat foglalja magában, jellemzően bizonyos kimeneti összetevőkre, például egy fájlra vagy fájlkészletre bizonyos bemenetek esetén. Általában feladatok sorozatából áll, de kritikusan azt jelenti, hogy valamit meg kell építeni vagy el kell végezni, ezért célorientált módon kell meghatározni. További információ: Célok.

Az alapértelmezett cél nincs definiálva a projektfájlban. Ehelyett az importált projektekben van megadva. A Importálás elem az importált projekteket határozza meg. Például egy C#-projektben az alapértelmezett célt a Microsoft.CSharp.targets fájlbólimportálják.

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

Az importált fájlok hatékonyan be lesznek szúrva a projektfájlba, bárhol is hivatkoznak rájuk.

Az SDK-stílusú projektekben ez az importálási elem nem jelenik meg, mivel az SDK attribútum implicit módon importálja a fájlt.

Az MSBuild nyomon követi a buildek céljait, és garantálja, hogy az egyes célok csak egyszer épülnek fel.

Adjon hozzá egy célhelyet a projektfájlhoz. Adjon hozzá egy feladatot a célhoz, amely egy üzenetet nyomtat.

Cél és tevékenység hozzáadása

  1. Adja hozzá ezeket a sorokat a projektfájlhoz az Importálási utasítás vagy a projekt megnyitása elem után.

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

    Ez a kód létrehoz egy HelloWorld nevű célt. Figyelje meg, hogy a projektfájl szerkesztésekor IntelliSense-támogatással rendelkezik.

  2. Adjon hozzá sorokat a HelloWorld-célhoz, hogy az eredményként kapott szakasz így nézzen ki:

    <Target Name="HelloWorld">
      <Message Text="Hello"></Message>
      <Message Text="World"></Message>
    </Target>
    
  3. Mentse a projektfájlt.

A Message feladat egyike az MSBuilddel együtt szállított számos feladatnak. Az elérhető tevékenységek és használati információk teljes listáját a Tevékenység referenciacímű témakörben találja.

A Message feladat bemenetként veszi a Text attribútum sztringértékét, és megjeleníti a kimeneti eszközön (vagy egy vagy több naplóba írja, ha van). A HelloWorld célpont kétszer hajtja végre az Üzenet feladatot: először a "Hello", majd a "World" megjelenítése.

A cél létrehozása

Ha ezt a projektet a Visual Studióból próbálja létrehozni, az nem a definiált célt hozza létre. Ennek az az oka, hogy a Visual Studio az alapértelmezett célértéket választja, amely továbbra is az importált .targets fájlban található. A cél Visual Studióban való létrehozásához az egyik alapértelmezett célhoz láncot állíthat be az elem bizonyos attribútumai Target , például AfterTargets vagy BeforeTargets. Az alábbiak szerint szerezheti be a HelloWorld-cél futtatását az alapértelmezett Build cél után:

<Target Name="HelloWorld" AfterTargets="Build">
    <Message Text="Hello"></Message>
    <Message Text="World"></Message>
</Target>

Futtassa újra a buildet a Visual Studióban, és keresse meg a Kimenet ablak Build lapját a Hello World üzeneteinek megtekintéséhez.

A kívánt célokat az MSBuild parancssorból való futtatásával is megadhatja. Ebben a szakaszban a Visual Studio fejlesztői parancssorából futtatja az MSBuild parancsot a HelloWorld-cél létrehozásához. A cél kiválasztásához használja a -target vagy -t parancssori kapcsolót.

Jegyzet

A Fejlesztői parancssort a következő szakaszokban Parancsablaknak nevezzük.

A cél felépítése:

  1. Ha hozzáadta, törölje az AfterTargets attribútumot, és mentse a projektfájlt.

  2. Nyissa meg a parancsablakot.

    Kezdje el beírni az eszköz nevét a tálcán lévő keresőmezőbe, például dev vagy developer command prompt. Megjelenik a keresési mintának megfelelő telepített alkalmazások listája.

    Ha manuálisan kell megtalálnia, a fájl a {Visual Studio telepítési mappájában}\Common7\Tools mappában LaunchDevCmd.bat.

  3. A parancsablakban keresse meg a projektfájlt tartalmazó mappát, ebben az esetben D:\BuildApp\BuildApp.

  4. Futtassa az msbuild parancskapcsolót -t:HelloWorld. Ez a parancs kiválasztja és létrehozza a HelloWorld-célt:

    msbuild buildapp.csproj -t:HelloWorld
    
  5. Vizsgálja meg a kimenetet a parancsablakban. A két sornak ("Hello" és "World") kell megjelennie:

    Hello
    World
    

A kódszerkesztő és a parancsablak váltakozásával módosíthatja a projektfájlt, és gyorsan megtekintheti az eredményeket.

Építési tulajdonságok

A build tulajdonságai olyan név-érték párok, amelyek útmutatást nyújtanak a buildhez. Több build tulajdonság már definiálva van a projekt fájl elején.

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

Minden tulajdonság a PropertyGroup-elemek gyermekelemei. A tulajdonság neve a gyermekelem neve, a tulajdonság értéke pedig a gyermekelem szöveges eleme. Például

<TargetFrameworkVersion>net8.0</TargetFrameworkVersion>

meghatározza a TargetFrameworkVersionnevű tulajdonságot, amely a "net8.0" sztringértéket adja meg

A build jellemzői bármikor újradefiniálhatók. Ha

<TargetFrameworkVersion>net8.0</TargetFrameworkVersion>

később jelenik meg a projektfájlban, vagy a projektfájl későbbi részében importált fájlban, majd TargetFrameworkVersion a "net8.0" új értéket veszi fel

Tulajdonságérték vizsgálata

Egy tulajdonság értékének lekéréséhez használja az alábbi szintaxist, amelyben PropertyName a tulajdonság neve:

$(PropertyName)

Ez a szintaxis a projektfájl néhány tulajdonságának vizsgálatához használható.

Tulajdonságérték vizsgálata

  1. A kódszerkesztőben cserélje le a HelloWorld-célt a következő kódra:

    <Target Name="HelloWorld">
      <Message Text="Configuration is $(Configuration)" />
      <Message Text="MSBuildToolsPath is $(MSBuildToolsPath)" />
    </Target>
    
  2. Mentse a projektfájlt.

  3. A parancsablakbanadja meg ezt a sort, majd hajtsa végre:

    msbuild buildapp.csproj -t:HelloWorld
    
  4. Vizsgálja meg a kimenetet. Ezt a két sort kell látnia (a kimenet eltérhet):

    Configuration is Debug
    MSBuildToolsPath is C:\Program Files\Microsoft Visual Studio\18\MSBuild\Current\Bin\amd64
    
    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
    

Feltételes tulajdonságok

Számos tulajdonság, például a Configuration feltételesen van definiálva, vagyis a Condition attribútum megjelenik a tulajdonságelemben. A feltételes tulajdonságok csak akkor vannak definiálva vagy újradefiniáltak, ha a feltétel értéke "igaz". A nem definiált tulajdonságok egy üres sztring alapértelmezett értékét adják meg. Például

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

Azt jelenti, hogy "Ha a Konfiguráció tulajdonság még nincs definiálva, definiálja, és adja meg a Hibakeresés értéket."

Szinte minden MSBuild elem rendelkezhet Condition attribútummal. A Condition attribútum használatáról további információt a Feltételekcímű témakörben talál.

Fenntartott tulajdonságok

Az MSBuild fenntart néhány tulajdonságnevet a projektfájlra és az MSBuild bináris fájlokra vonatkozó információk tárolásához. Az MSBuildToolsPath egy fenntartott tulajdonság példája. A fenntartott tulajdonságokra a $ jelöléssel hivatkozunk, mint bármely más tulajdonságra. További információért lásd: Útmutató: Hivatkozás a projektfájl nevére vagy helyére és MSBuild fenntartott és jól ismert tulajdonságok.

Környezeti változók

A projektfájlok környezeti változóira ugyanúgy hivatkozhat, mint a buildtulajdonságokra. Ha például a PATH környezeti változót szeretné használni a projektfájlban, használja a $(Path). Ha a projekt olyan tulajdonságdefiníciót tartalmaz, amelynek neve megegyezik egy környezeti változó nevével, a projekt tulajdonsága felülírja a környezeti változó értékét. További információért lásd: Hogyan: Környezeti változók használata a build során.

Tulajdonságok beállítása a parancssorból

A tulajdonságok a parancssorban a -property vagy -p parancssori kapcsolóval határozhatók meg. A parancssorból kapott tulajdonságértékek felülbírálják a projektfájlban és a környezeti változókban beállított tulajdonságértékeket.

Tulajdonságérték beállítása a parancssorból:

  1. A parancsablakbanadja meg ezt a sort, majd hajtsa végre:

    msbuild buildapp.csproj -t:HelloWorld -p:Configuration=Release
    
  2. Vizsgálja meg a kimenetet. Látni kellene ezt a sort:

    Configuration is Release.
    

Az MSBuild létrehozza a Configuration tulajdonságot, és megadja neki a "Release" értéket.

Speciális karakterek

Bizonyos karakterek speciális jelentéssel rendelkeznek az MSBuild projektfájlokban. Ilyen karakterek például a pontosvesszők (;) és a csillag (*). Ahhoz, hogy ezeket a speciális karaktereket konstansként lehessen használni egy projektfájlban, meg kell adni őket a %<xx>szintaxissal, ahol <xx> a karakter ASCII hexadecimális értékét jelöli.

Módosítsa az Üzenet feladatot úgy, hogy a Konfiguráció tulajdonság értékét speciális karakterekkel jelenítse meg, hogy olvashatóbb legyen.

Speciális karakterek használata az Üzenet feladatban:

  1. A kódszerkesztőben cserélje le mindkét Üzenet feladatot erre a sorra:

    <Message Text="%24(Configuration) is %22$(Configuration)%22" />
    
  2. Mentse a projektfájlt.

  3. A parancsablakbanadja meg ezt a sort, majd hajtsa végre:

    msbuild buildapp.csproj -t:HelloWorld
    
  4. Vizsgálja meg a kimenetet. Látni kellene ezt a sort:

    $(Configuration) is "Debug"
    

További információ: MSBuild speciális karakterek.

Elemek összeállítása

Az elem egy információ, általában egy fájlnév, amelyet a buildelési rendszer bemeneteként használnak. Előfordulhat például, hogy a forrásfájlokat képviselő elemek gyűjteményét egy Fordítás nevű feladat számára biztosítják, hogy azokból összeállítást készítsen.

Minden elem az ItemGroup-elemek gyermekelemei. Az elem neve a gyermekelem neve, az elem értéke pedig a gyermekelem Belefoglalás attribútumának értéke. Az azonos nevű elemek értékeit a rendszer ennek a névnek az elemtípusaiba gyűjti. Például

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

két elemet tartalmazó elemcsoportot határoz meg. A Compile elemtípusnak két értéke van: Program.cs és Properties\AssemblyInfo.cs.

Az alábbi kód ugyanazt az elemtípust hozza létre úgy, hogy mindkét fájlt egy Include attribútumban deklarálja, pontosvesszővel elválasztva.

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

További információ: Elemek.

Jegyzet

A fájl elérési útjai az MSBuild projektfájlt tartalmazó mappához képest vannak, még akkor is, ha a projektfájl importált projektfájl. Ez alól néhány kivétel van, például Import és UsingTask elemek használata esetén.

Elemtípus értékeinek vizsgálata

Egy elemtípus értékeinek lekéréséhez használja az alábbi szintaxist, amelyben ItemType az elemtípus neve:

@(ItemType)

Ezzel a szintaxissal megvizsgálhatja a projektfájl Compile elemtípusát.

Elemtípusértékek vizsgálata:

  1. A kódszerkesztőben cserélje le a HelloWorld célfeladatot a következő kódra:

    <Target Name="HelloWorld">
      <Message Text="Compile item type contains @(Compile)" />
    </Target>
    
  2. Mentse a projektfájlt.

  3. A parancsablakbanadja meg ezt a sort, majd hajtsa végre:

    msbuild buildapp.csproj -t:HelloWorld
    
  4. Vizsgálja meg a kimenetet. Ezt a hosszú sort kell látnia:

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

Az elemtípus értékei alapértelmezés szerint pontosvesszővel vannak elválasztva.

Egy elemtípus elválasztójának módosításához használja az alábbi szintaxist, amelyben az ItemType az elemtípus, az elválasztó pedig egy vagy több elválasztó karakterből álló sztring:

@(ItemType, Separator)

Módosítsa a Message feladatot úgy, hogy kocsivissza- és sorbetöltéseket (%0A%0D) használjon a fordítási elemek soronkénti megjelenítéséhez.

Az elemtípus értékeit soronként egyenként jelenítse meg

  1. A kódszerkesztőben cserélje le az Üzenet feladatot a következő sorra:

    <Message Text="Compile item type contains @(Compile, '%0A%0D')" />
    
  2. Mentse a projektfájlt.

  3. A parancsablakbanadja meg ezt a sort, majd hajtsa végre:

    msbuild buildapp.csproj -t:HelloWorld
    
  4. Vizsgálja meg a kimenetet. A következő sorokat kell látnia:

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

Belefoglalás, kizárás és helyettesítő karakterek

A "*", "**" és "?" helyettesítő karaktereket a Include attribútummal használhatja, hogy elemeket adjon hozzá egy elemtípushoz. Például

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

a képek mappában lévő .jpeg fájlkiterjesztéssel rendelkező összes fájlt hozzáadja a Fényképek elemtípushoz, míg

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

A képek mappában .jpeg kiterjesztésű összes fájlt hozzáadja a Fényképek elemtípushoz. További példákért lásd: Hogyan válasszuk ki az építendő fájlokat.

Figyelje meg, hogy a deklarált elemek hozzáadódnak az elemtípushoz. Például

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

Létrehoz egy Fénykép nevű elemtípust, amely a lemezképek mappában lévő összes fájlt tartalmazza, .jpeg vagy .giffájlkiterjesztéssel. Ezek a sorok egyenértékűek a következő sorokkal:

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

A Exclude attribútummal kizárhat egy elemet egy elemtípusból. Például

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

A elemtípushoz hozzáadja a Compile kiterjesztésű összes fájlt, kivéve azokat a fájlokat, amelyek neve tartalmazza a Designersztringet. További példákért lásd a : Hogyan zárjuk ki a fájlokat a build folyamatából.

A Exclude attribútum csak a mindkettőt tartalmazó elemelem Include attribútuma által hozzáadott elemeket érinti. Például

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

nem zárja ki az előző elemelemben hozzáadott Form1.csfájlt.

Elemek belefoglalása és kizárása

  1. A kódszerkesztőben cserélje le az Üzenet feladatot a következő sorra:

    <Message Text="XFiles item type contains @(XFiles)" />
    
  2. Adja hozzá ezt az elemcsoportot az Importálás elem után:

    <ItemGroup>
       <XFiles Include="*.cs;properties/*.resx" Exclude="*Designer*" />
    </ItemGroup>
    
  3. Mentse a projektfájlt.

  4. A parancsablakbanadja meg ezt a sort, majd hajtsa végre:

    msbuild buildapp.csproj -t:HelloWorld
    
  5. Vizsgálja meg a kimenetet. Látni kellene ezt a sort:

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

Elem metaadatai

Az elemek a Include és Exclude attribútumokból gyűjtött információk mellett metaadatokat is tartalmazhatnak. Azok a feladatok, amelyek több információt igényelnek az elemekről, mint az elemérték, használhatják ezt a metaadatokat.

Az elem metaadatai a projektfájlban deklarálhatók úgy, hogy létrehoznak egy elemet, amely a metaadatok nevét tartalmazza az elem gyermekelemeként. Egy elemnek nulla vagy több metaadatértéke lehet. Az alábbi CSFile-elem például "Fr" értékkel rendelkező kulturális metaadatokat tartalmazza:

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

Egy elemtípus metaadat-értékének lekéréséhez használja az alábbi szintaxist, amelyben ItemType az elemtípus neve, a MetaDataName pedig a metaadatok neve:

%(ItemType.MetaDataName)

Elem metaadatainak vizsgálata:

  1. A kódszerkesztőben cserélje le az Üzenet feladatot a következő sorra:

    <Message Text="Compile.DependentUpon: %(Compile.DependentUpon)" />
    
  2. Mentse a projektfájlt.

  3. A parancsablakbanadja meg ezt a sort, majd hajtsa végre:

    msbuild buildapp.csproj -t:HelloWorld
    
  4. Vizsgálja meg a kimenetet. A következő sorokat kell látnia:

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

Figyelje meg, hogy a "Compile.DependentUpon" kifejezés többször is megjelenik. A metaadatoknak a célszintaxison belüli használata "kötegelést" okoz. A kötegelés azt jelenti, hogy a célon belüli tevékenységek mindegyik egyedi metaadat-értékhez egyszer lesznek végrehajtva. A kötelítés az MSBuild szkriptben az általános "foreach" ciklus programozási szerkezettel egyenértékű. További információ: Batching.

Jól ismert metaadatok

Amikor egy elemet hozzáad egy elemlistához, az adott elemhez hozzá lesz rendelve néhány jól ismert metaadat. Például %(Filename) bármely elem fájlnevét adja vissza. A jól ismert metaadatok teljes listáját jól ismert elem-metaadatokcímű témakörben találja.

Jól ismert metaadatok vizsgálata:

  1. A kódszerkesztőben cserélje le az Üzenet feladatot a következő sorra:

    <Message Text="Compile Filename: %(Compile.Filename)" />
    
  2. Mentse a projektfájlt.

  3. A parancsablakbanadja meg ezt a sort, majd hajtsa végre:

    msbuild buildapp.csproj -t:HelloWorld
    
  4. Vizsgálja meg a kimenetet. A következő sorokat kell látnia:

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

Az előző két példa összehasonlításával láthatja, hogy bár a Compile elemtípusban nem minden elem rendelkezik DependUpon metaadatokkal, minden elem rendelkezik a jól ismert Fájlnév metaadatokkal.

Metaadat-átalakítások

Az elemlisták új elemlistákká alakíthatók. Egy elemlista átalakításához használja az alábbi szintaxist, amelyben <ItemType> az elemtípus neve, <MetadataName> pedig a metaadatok neve:

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

A forrásfájlok elemlistája például objektumfájlok gyűjteményévé alakítható egy olyan kifejezéssel, mint a @(SourceFiles -> '%(Filename).obj'). További információ: Átalakítások.

Elemek metaadatokkal való átalakítása:

  1. A kódszerkesztőben cserélje le az Üzenet feladatot a következő sorra:

    <Message Text="Backup files: @(Compile->'%(filename).bak')" />
    
  2. Mentse a projektfájlt.

  3. A parancsablakbanadja meg ezt a sort, majd hajtsa végre:

    msbuild buildapp.csproj -t:HelloWorld
    
  4. Vizsgálja meg a kimenetet. Látni kellene ezt a sort:

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

Figyelje meg, hogy az ebben a szintaxisban kifejezett metaadatok nem okoznak csoportosítást.

Következő lépések

Ha szeretné megtudni, hogyan hozhat létre egy egyszerű projektfájlt lépésről lépésre Windows rendszeren, próbálja ki MSBuild projektfájl létrehozása az alapoktól.

Ha elsősorban a .NET SDK-t használja, olvassa el a .NET SDK-projektek MSBuild referenciáját.