Öğretici: MSBuild kullanma

MSBuild, Microsoft ve Visual Studio için bir yapı platformudur. Bu öğretici, MSBuild'in yapı taşları hakkında bilgi sağlar ve MSBuild projelerini nasıl yazabileceğinizi, işleyip hatalarını nasıl ayıklayabileceğinizi gösterir. Şunları öğreneceksiniz:

  • Bir proje dosyasını oluşturma ve işleme.

  • Derleme özelliklerini kullanma.

  • Yapı öğelerinin kullanılması.

MSBuild'i Visual Studio'dan veya Komut Penceresi'nden çalıştırabilirsiniz. Bu öğreticide Visual Studio kullanarak bir MSBuild proje dosyası oluşturacaksınız. Proje dosyasını Visual Studio'da düzenler ve Komut Penceresi'ni kullanarak projeyi derleyip sonuçları incelersiniz.

MSBuild'i yükleme

Visual Studio'nuz varsa MSBuild zaten yüklüdür. Visual Studio 2019 ve sonraki sürümlerde, Visual Studio yükleme klasörünün altına yüklenir. Windows 10'da tipik bir varsayılan yükleme için MSBuild.exe, MSBuild\Current\Bin içindeki yükleme klasörünün altındadır.

Yükleyicide, kullandığınız iş yükleri için MSBuild araçlarının seçili olduğundan emin olun ve Yükle'yi seçin.

Installing MSBuild

MSBuild'i Visual Studio olmayan bir sisteme yüklemek için Visual Studio 2019 için Derleme Araçları'na gidin veya .NET SDK'sını yükleyin.

Visual Studio'nuz varsa MSBuild zaten yüklüdür. Visual Studio 2022 ile, Visual Studio yükleme klasörünün altına yüklenir. Windows 10'da tipik bir varsayılan yükleme için MSBuild.exe, MSBuild\Current\Bin içindeki yükleme klasörünün altındadır.

Visual Studio yükleyicisinde Tek Tek Bileşenler'e gidin ve MSBuild onay kutusunu bulun. Yüklenecek diğer iş yüklerinden birini seçtiğinizde otomatik olarak seçilir.

MSBuild'i Visual Studio içermeyen bir sisteme yüklemek için indirmeler sayfasında Visual Studio 2022 için Derleme Araçları'na gidin. MSBuild almanın bir diğer yolu da .NET SDK'sını yüklemektir.

MSBuild projesi oluşturma

Visual Studio proje sistemi MSBuild'i temel alır. Visual Studio kullanarak yeni bir proje dosyası oluşturmak kolaydır. Bu bölümde bir C# proje dosyası oluşturacaksınız. Bunun yerine bir Visual Basic proje dosyası oluşturmayı seçebilirsiniz. Bu öğretici bağlamında, iki proje dosyası arasındaki fark küçük.

Proje dosyası oluşturmak için

  1. Visual Studio'yu açın ve bir proje oluşturun:

    Arama kutusuna yazınwinforms, ardından Yeni Bir Windows Forms Uygulaması (.NET Framework) oluştur'u seçin. Görüntülenen iletişim kutusunda Oluştur'u seçin.

    Proje adı kutusuna yazınBuildApp. Çözüm için bir Konum girin; örneğin, D:\.

  2. Proje dosyasını oluşturmak için Tamam'a veya Oluştur'a tıklayın.

Proje dosyasını inceleme

Önceki bölümde, C# proje dosyası oluşturmak için Visual Studio'yu kullandınız. Proje dosyası Çözüm Gezgini içinde BuildApp adlı proje düğümü tarafından temsil edilir. Proje dosyasını incelemek için Visual Studio kod düzenleyicisini kullanabilirsiniz.

Proje dosyasını incelemek için

  1. Çözüm Gezgini'da BuildApp proje düğümüne tıklayın.

  2. Özellikler tarayıcısında Proje Dosyası özelliğinin BuildApp.csproj olduğuna dikkat edin. Tüm proje dosyaları sonek proj ile adlandırılır. Visual Basic projesi oluşturmuş olsaydınız proje dosya adı BuildApp.vbproj olurdu.

  3. Proje düğümüne yeniden sağ tıklayın ve ardından BuildApp.csproj Dosyasını Düzenle'ye tıklayın.

    Proje dosyası kod düzenleyicisinde görüntülenir.

Dekont

C++ gibi bazı proje türleri için, proje dosyasını açıp düzenleyebilmeniz için önce projeyi kaldırmanız gerekir (proje dosyasına sağ tıklayın ve Projeyi kaldır'ı seçin).

Hedefler ve görevler

Proje dosyaları, kök düğümü Project olan XML biçimli dosyalardır.

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

Çoğu .NET projesinin bir Sdk özniteliği vardır. Bu projeler SDK stili projeler olarak adlandırılır.

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

Özel amaçlar için birçok .NET SDK'sı varyasyonu vardır; bunlar .NET Proje SDK'ları bölümünde açıklanmıştır.

Uygulama oluşturma işi Hedef ve Görev öğeleriyle yapılır.

  • Görev, işin en küçük birimdir; başka bir deyişle yapının "atom" öğesidir. Görevler, giriş ve çıkışlara sahip olabilecek bağımsız yürütülebilir bileşenlerdir. Şu anda proje dosyasında başvurulan veya tanımlanan görev yoktur. Aşağıdaki bölümlerde proje dosyasına görevler eklersiniz. Daha fazla bilgi için bkz . Görevler.

  • Hedef, görevlerin adlandırılmış bir dizisidir. Adlandırılmış bir görev dizisi olabilir, ancak kritik önemle, oluşturulacak veya yapılacak bir şeyi temsil eder, bu nedenle hedef odaklı bir şekilde tanımlanmalıdır. Daha fazla bilgi için bkz . Hedefler.

Varsayılan hedef proje dosyasında tanımlanmamıştır. Bunun yerine, içeri aktarılan projelerde belirtilir. import öğesi içeri aktarılan projeleri belirtir. Örneğin, bir C# projesinde varsayılan hedef Microsoft.CSharp.targets dosyasından içeri aktarılır.

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

İçeri aktarılan dosyalar, başvuruldukları her yerde proje dosyasına etkili bir şekilde eklenir.

SDK stilindeki projelerde, SDK özniteliği bu dosyanın örtük olarak içeri aktarılmasına neden olduğundan bu içeri aktarma öğesini görmezsiniz.

MSBuild, bir yapının hedeflerini izler ve her bir hedefin birden kereden fazla oluşturulmamasını sağlar.

Hedef ve görev ekleme

Proje dosyasına bir hedef ekleyin. Hedefe ileti yazdıran bir görev ekleyin.

Hedef ve görev eklemek için

  1. İçeri Aktar deyiminden veya project öğesinin açılmasından hemen sonra bu satırları proje dosyasına ekleyin.

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

    Bu kod HelloWorld adlı bir hedef oluşturur. Proje dosyasını düzenlerken IntelliSense desteğiniz olduğuna dikkat edin.

  2. Sonuç bölümün aşağıdaki şekilde gözükmesi için HelloWorld hedefine satırlar ekleyin:

    <Target Name="HelloWorld">
      <Message Text="Hello"></Message>  <Message Text="World"></Message>
    </Target>
    
  3. Proje dosyasını kaydedin.

Görev Message , MSBuild ile birlikte gelen birçok görevden biridir. Kullanılabilir görevlerin ve kullanım bilgilerinin tam listesi için bkz . Görev başvurusu.

Görev, Message Text özniteliğinin dize değerini giriş olarak alır ve çıkış cihazında görüntüler (veya varsa bir veya daha fazla günlüke yazar). HelloWorld hedefi İleti görevini iki kez yürütür: önce "Hello" öğesini görüntülemek ve ardından "Dünya" öğesini görüntülemek için.

Hedefi oluşturma

Bu projeyi Visual Studio'dan derlemeye çalışırsanız, tanımladığınız hedefi oluşturmaz. Bunun nedeni Visual Studio'nun içeri aktarılan .targets dosyadaki varsayılan hedefi seçmesidir.

Daha önce tanımlanan HelloWorld hedefini oluşturmak için Visual Studio için Geliştirici Komut İstemi'nden MSBuild'i çalıştırın. Hedefi seçmek için -target veya -t komut satırı anahtarını kullanın.

Dekont

Aşağıdaki bölümlerde Komut Penceresi olarak Geliştirici Komut İstemi'ne başvuracağız.

Hedefi oluşturmak için:

  1. Komut Penceresi'ni açın.

    Görev çubuğundaki arama kutusuna veya gibi devdeveloper command promptaracın adını yazmaya başlayın. Bu, arama düzeninizle eşleşen yüklü uygulamaların listesini getirir.

    El ile bulmanız gerekiyorsa, dosya {Visual Studio yükleme klasörü}\Common7\Tools klasöründe LaunchDevCmd.batolur.

  2. Komut penceresinden proje dosyasını içeren klasöre gidin( bu örnekte D :\BuildApp\BuildApp).

  3. msbuild komutunu komut anahtarıyla -t:HelloWorldçalıştırın. Bu komut HelloWorld hedefini seçer ve oluşturur:

    msbuild buildapp.csproj -t:HelloWorld
    
  4. Komut penceresindeki çıkışı inceleyin. "Hello" ve "World" satırlarını görmeniz gerekir:

    Hello
    World
    

Dekont

Bunun yerine proje The target "HelloWorld" does not exist in the project dosyasını kod düzenleyicisine kaydetmeyi unuttunuz demektir. Dosyayı kaydedin ve yeniden deneyin.

Kod düzenleyicisi ve komut penceresi arasında değişerek proje dosyasını değiştirebilir ve sonuçları hızlı bir şekilde görebilirsiniz.

Derleme özellikleri

Yapı özellikleri, yapıya rehberlik eden ad-değer çiftleridir. Birkaç yapı özelliği proje dosyasının üst kısmında zaten tanımlanmıştır:

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

Tüm özellikler PropertyGroup öğelerinin alt öğeleridir. Özelliğin adı alt öğenin adıdır ve özelliğinin değeri alt öğenin metin öğesidir. Örneğin:

<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>

TargetFrameworkVersion adlı özelliği tanımlar ve "v4.5" dize değerini verir.

Derleme özellikleri istediğiniz zaman yeniden tanımlanabilir. If

<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

daha sonra proje dosyasında veya proje dosyasında daha sonra içeri aktarılan bir dosyada görünür, ardından TargetFrameworkVersion yeni "v3.5" değerini alır.

Özellik değerini inceleme

Bir özelliğin değerini almak için aşağıdaki söz dizimini kullanın. Burada PropertyName özelliğin adıdır:

$(PropertyName)

Proje dosyasındaki bazı özellikleri incelemek için şu söz dizimini kullanın.

Özellik değerini incelemek için

  1. Kod düzenleyicisinden HelloWorld hedefini şu kodla değiştirin:

    <Target Name="HelloWorld">
      <Message Text="Configuration is $(Configuration)" />
      <Message Text="MSBuildToolsPath is $(MSBuildToolsPath)" />
    </Target>
    
  2. Proje dosyasını kaydedin.

  3. Komut Penceresi'nden şu satırı girin ve yürütebilirsiniz:

    msbuild buildapp.csproj -t:HelloWorld
    
  4. Çıkışı inceleyin. Şu iki satırı görmeniz gerekir (çıkışınız farklı olabilir):

    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
    

Koşullu özellikler

gibi Configuration birçok özellik koşullu olarak tanımlanır, Condition yani özniteliği özellik öğesinde görünür. Koşullu özellikler yalnızca koşul "true" olarak değerlendirilirse tanımlanır veya yeniden tanımlanır. Tanımlanmamış özelliklere boş bir dizenin varsayılan değeri verilir. Örneğin:

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

"Configuration özelliği henüz tanımlanmamışsa tanımlayın ve 'Debug' değerini verin" anlamına gelir.

Neredeyse tüm MSBuild öğeleri bir Koşul özniteliğine sahiptir. Condition özniteliğini kullanma hakkında daha fazla bilgi için bkz . Koşullar.

Ayrılmış özellikler

MSBuild, proje dosyası ve MSBuild ikili dosyaları hakkındaki bilgileri depolamak için bazı özellik adlarını saklar. MSBuildToolsPath ayrılmış bir özellik örneğidir. Ayrılmış özelliklere, diğer tüm özellikler gibi $ gösterimi ile başvurulur. Daha fazla bilgi için bkz . Nasıl yapılır: Proje dosyasının adına veya konumuna ve MSBuild ayrılmış ve iyi bilinen özelliklere başvurma.

Ortam değişkenleri

Proje dosyalarındaki ortam değişkenlerine yapı özellikleriyle aynı şekilde başvurabilirsiniz. Örneğin, proje dosyanızda PATH ortam değişkenini kullanmak için $(Yol) işaretini kullanın. Proje, ortam değişkeniyle ile aynı ada sahip bir özellik tanımı içeriyorsa projedeki özellik, ortam değişkeninin değerini geçersiz kılar. Daha fazla bilgi için bkz . Nasıl yapılır: Derlemede ortam değişkenlerini kullanma.

Komut satırından özellikleri ayarlama

Özellikler komut satırında -property veya -p komut satırı anahtarı kullanılarak tanımlanabilir. Komut satırından alınan özellik değerleri, proje dosyasında ve ortam değişkenlerinde ayarlanan özellik değerlerini geçersiz kılar.

Komut satırından bir özellik değeri ayarlamak için:

  1. Komut Penceresi'nden şu satırı girin ve yürütebilirsiniz:

    msbuild buildapp.csproj -t:HelloWorld -p:Configuration=Release
    
  2. Çıkışı inceleyin. Şu satırı görmeniz gerekir:

    Configuration is Release.
    

MSBuild Configuration özelliğini oluşturur ve "Release" değerini verir.

Özel karakterler

Belirli karakterlerin MSBuild proje dosyalarında özel anlamı vardır. Bu karakterler örnekleri noktalı virgülleri (;) ve yıldız işaretlerini (*) içerir. Bu özel karakterleri proje dosyasında değişmez değer olarak kullanmak için, %<xx> söz dizimi kullanılarak belirtilmelidir; burada <xx> , karakterin ASCII onaltılık değerini temsil eder.

İleti görevini, Yapılandırma özelliğinin değerini daha okunabilir yapmak için özel karakterlerle gösterecek şekilde değiştirin.

İleti görevinde özel karakterler kullanmak için:

  1. Kod düzenleyicisinden her iki İleti görevini şu satır ile değiştirin:

    <Message Text="%24(Configuration) is %22$(Configuration)%22" />
    
  2. Proje dosyasını kaydedin.

  3. Komut Penceresi'nden şu satırı girin ve yürütebilirsiniz:

    msbuild buildapp.csproj -t:HelloWorld
    
  4. Çıkışı inceleyin. Şu satırı görmeniz gerekir:

    $(Configuration) is "Debug"
    

Daha fazla bilgi için bkz . MSBuild özel karakterleri.

Derleme öğeleri

Öğe, yapı sistemine girdi olarak kullanılan ve genellikle bir dosya adı olan bir bilgi parçasıdır. Örneğin, kaynak dosyalarını temsil eden bir öğe koleksiyonu öğeleri bir araya derlemek için Derleme adlı bir göreve geçirilebilir.

Tüm öğeler ItemGroup öğelerinin alt öğeleridir. Öğe adı alt öğenin adıdır ve öğe değeri alt öğeye ait Dahil Etme özniteliğinin değeridir. Aynı ada sahip öğelerin değeri bu adda öğe türlerine toplanır. Örneğin:

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

iki öğe içeren bir öğe grubunu tanımlar. Derleme öğe türü iki değere sahiptir: Program.cs ve Properties\AssemblyInfo.cs.

Aşağıdaki kod, her iki dosyayı da noktalı virgülle ayırarak tek Include bir öznitelikte bildirerek aynı öğe türünü oluşturur.

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

Daha fazla bilgi için bkz . Öğeler.

Dekont

Proje dosyası içeri aktarılan bir proje dosyası olsa bile dosya yolları MSBuild proje dosyasını içeren klasöre göredir. İçeri Aktarma ve UsingTask öğelerini kullanma gibi bazı özel durumlar vardır.

Öğe türü değerlerini inceleme

Bir öğe türünün değerlerini almak için aşağıdaki söz dizimini kullanın; burada ItemType öğe türünün adıdır:

@(ItemType)

Proje dosyasındaki Compile öğe türünü incelemek için bu söz dizimini kullanın.

Öğe türü değerlerini incelemek için:

  1. Kod düzenleyicisinden HelloWorld hedef görevini şu kodla değiştirin:

    <Target Name="HelloWorld">
      <Message Text="Compile item type contains @(Compile)" />
    </Target>
    
  2. Proje dosyasını kaydedin.

  3. Komut Penceresi'nden şu satırı girin ve yürütebilirsiniz:

    msbuild buildapp.csproj -t:HelloWorld
    
  4. Çıkışı inceleyin. Şu uzun satırı görmeniz gerekir:

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

Bir öğe türünün değerleri varsayılan olarak virgüllerle ayrılır.

Bir öğe türünün ayracını değiştirmek için, ItemType'ın öğe türü ve Ayırıcı'nın bir veya daha fazla ayırma karakterinin dizesi olduğu aşağıdaki söz dizimini kullanın:

@(ItemType, Separator)

Her satırda bir tane Derleme öğesi görüntülemek için taşıma dönüşlerini ve satır beslemelerini (%0A%0D) kullanmak üzere İleti görevini değiştirin.

Öğe türü değerlerini satır başına bir kez görüntülemek için

  1. Kod düzenleyicisinden İleti görevini şu satır ile değiştirin:

    <Message Text="Compile item type contains @(Compile, '%0A%0D')" />
    
  2. Proje dosyasını kaydedin.

  3. Komut Penceresi'nden şu satırı girin ve yürütebilirsiniz:

    msbuild buildapp.csproj -t:HelloWorld
    
  4. Çıkışı inceleyin. Şu satırları görmeniz gerekir:

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

Ekleme, Dışlama ve joker karakterler

Öğe türüne öğe eklemek için Include özniteliğiyle "*", "**" ve "?" joker karakterlerini kullanabilirsiniz. Örneğin:

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

images klasöründeki .jpeg dosya uzantısına sahip tüm dosyaları Fotoğraflar öğe türüne eklerken,

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

images klasörüne .jpeg dosya uzantısına sahip tüm dosyaları ve tüm alt klasörlerini Fotoğraflar öğe türüne ekler. Daha fazla örnek için bkz . Nasıl yapılır: Derlemek için dosyaları seçme.

Öğeler bildirildikçe öğe türüne eklendiğine dikkat edin. Örneğin:

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

veya dosya uzantısına .gif.jpeg sahip images klasöründeki tüm dosyaları içeren Photo adlı bir öğe türü oluşturur. Bu satırlar aşağıdaki satıra eşdeğerdir:

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

Bir öğeyi özniteliğiyle Exclude bir öğe türünün dışında tutabilirsiniz. Örneğin:

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

adları Tasarım Aracı dizesini içeren dosyalar dışında.cs dosya uzantısına sahip tüm dosyaları Derleme öğesi türüne ekler. Daha fazla örnek için bkz . Nasıl yapılır: Dosyaları derlemenin dışında tutma.

Exclude özniteliği yalnızca her ikisini de içeren öğe öğesinde Include özniteliği tarafından eklenen öğeleri etkiler. Örneğin:

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

önceki öğe öğesine eklenen Form1.cs dosyasını dışlamaz.

Öğeleri dahil etmek ve dışlamak için

  1. Kod düzenleyicisinden İleti görevini şu satır ile değiştirin:

    <Message Text="XFiles item type contains @(XFiles)" />
    
  2. İçe Aktarma öğesinden hemen sonra şu öğe grubunu ekle:

    <ItemGroup>
       <XFiles Include="*.cs;properties/*.resx" Exclude="*Designer*" />
    </ItemGroup>
    
  3. Proje dosyasını kaydedin.

  4. Komut Penceresi'nden şu satırı girin ve yürütebilirsiniz:

    msbuild buildapp.csproj -t:HelloWorld
    
  5. Çıkışı inceleyin. Şu satırı görmeniz gerekir:

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

Öğe meta verileri

Öğeler, ve Exclude özniteliklerinden Include toplanan bilgilere ek olarak meta veriler içerebilir. Öğeler hakkında yalnızca öğe değerinden daha fazla bilgi gerektiren görevler bu meta verileri kullanabilir.

Öğe meta verileri, öğenin bir alt öğesi olarak meta verilerin adı ile bir öğe oluşturularak proje dosyasında bildirilir. Bir öğe sıfır veya daha fazla meta veri değerine sahip olabilir. Örneğin aşağıdaki CSFile öğesi, "Fr" değeri olan Kültür meta verisine sahiptir:

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

Bir öğe türünün meta veri değerini almak için aşağıdaki söz dizimini kullanın; burada ItemType öğe türünün adı, MetaVeriAdı ise meta verilerin adıdır:

%(ItemType.MetaDataName)

Öğe meta verilerini incelemek için:

  1. Kod düzenleyicisinden İleti görevini şu satır ile değiştirin:

    <Message Text="Compile.DependentUpon: %(Compile.DependentUpon)" />
    
  2. Proje dosyasını kaydedin.

  3. Komut Penceresi'nden şu satırı girin ve yürütebilirsiniz:

    msbuild buildapp.csproj -t:HelloWorld
    
  4. Çıkışı inceleyin. Şu satırları görmeniz gerekir:

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

"Compile.DependentUpon" ifadesinin birkaç kez nasıl görüntülendiğine dikkat edin. Hedefte bu söz dizimiyle meta verilerin kullanılması "toplu işleme" neden olur. Toplu işlem, hedef içindeki görevlerin her benzersiz meta veri değeri için bir kez yürütülmesi anlamına gelir. Batching, ortak "foreach döngüsü" programlama yapısının MSBuild betiğiyle eşdeğerdir. Daha fazla bilgi için bkz . Batching.

İyi bilinen meta veriler

Öğe bir öğe listesine eklendiğinde bu öğe, bazı iyi bilinen meta verilere atanır. Örneğin, %(Filename) herhangi bir öğenin dosya adını döndürür. İyi bilinen meta verilerin tam listesi için bkz . İyi bilinen öğe meta verileri.

İyi bilinen meta verileri incelemek için:

  1. Kod düzenleyicisinden İleti görevini şu satır ile değiştirin:

    <Message Text="Compile Filename: %(Compile.Filename)" />
    
  2. Proje dosyasını kaydedin.

  3. Komut Penceresi'nden şu satırı girin ve yürütebilirsiniz:

    msbuild buildapp.csproj -t:HelloWorld
    
  4. Çıkışı inceleyin. Şu satırları görmeniz gerekir:

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

Yukarıdaki iki örneği karşılaştırarak, Derleme öğesi türündeki her öğenin DependentUpon meta verileri olmasa da, tüm öğelerin iyi bilinen Dosya adı meta verilerine sahip olduğunu görebilirsiniz.

Meta veri dönüştürmeleri

Öğe listeleri yeni öğe listelerine dönüştürülebilir. Öğe listesini dönüştürmek için aşağıdaki söz dizimini kullanın; burada <ItemType> öğe türünün adı, <MetadataName> ise meta verilerin adıdır:

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

Örneğin kaynak dosyalarının öğe listesi, @(SourceFiles -> '%(Filename).obj') gibi bir ifade kullanılarak bir nesne dosyaları koleksiyonuna dönüştürülebilir. Daha fazla bilgi için bkz . Dönüşümler.

Meta verileri kullanarak öğeleri dönüştürmek için:

  1. Kod düzenleyicisinden İleti görevini şu satır ile değiştirin:

    <Message Text="Backup files: @(Compile->'%(filename).bak')" />
    
  2. Proje dosyasını kaydedin.

  3. Komut Penceresi'nden şu satırı girin ve yürütebilirsiniz:

    msbuild buildapp.csproj -t:HelloWorld
    
  4. Çıkışı inceleyin. Şu satırı görmeniz gerekir:

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

Bu söz diziminde ifade edilen meta verilerin toplu işleme neden olmadığını fark edin.

Sonraki adımlar

Adım adım basit bir proje dosyası oluşturmayı öğrenmek için Windows'ta Sıfırdan MSBuild proje dosyası oluşturma'yı deneyin.

Birincil olarak .NET SDK kullanıyorsanız .NET SDK Projeleri için MSBuild Başvurusu makalesini okumaya devam edin.