Kılavuz: MSBuild kullanmak

MSBuild, .NET ve C++ projeleri de dahil olmak üzere çoğu Visual Studio projesini derlemek için kullanılan Microsoft ve Visual Studio için derleme 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. Şu konularda bilgi ediniyorsunuz:

  • Proje dosyası oluşturma ve düzenleme.

  • Derleme özelliklerini nasıl kullanacağınız.

  • Derleme öğeleri nasıl kullanılır?

MSBuild'i Visual Studio'dan veya komut penceresindenMSBuild.exeçalıştırarak çalıştırabilirsiniz. MsBuild'i komut penceresinden çalıştırmak istemenin birçok nedeni vardır. Örneğin, Visual Studio yüklü olmayan bir makinede derleme yapmak veya Visual Studio IDE'de ayarlayabildiğiniz belirli komut satırı bağımsız değişkenlerini kullanmak isteyebilirsiniz. Örneğin, komut satırından çalıştırarak belirli MSBuild özelliklerini ayarlayabilir, derleme sorununun hatalarını ayıklamak için ikili günlük oluşturabilir veya derlemenin tam derleme yerine belirli bir derleme hedefini açıkça çalıştırma gibi bir alt kümesini çalıştırabilirsiniz. Bkz . MSBuild komut satırı başvurusu. MSBuild.exe kullanarak derleme sunucusunda veya işlem hattındaki bir kapsayıcıda oturum açarak Visual Studio'nun tamamı yüklü olmayan makineler üzerinde de oluşturabilirsiniz.

Bu öğreticide Visual Studio kullanarak bir MSBuild proje dosyası oluşturacaksınız. Proje dosyasını Visual Studio'da düzenler ve projeyi oluşturmak ve sonuçları incelemek için Komut Penceresi kullanırsınız.

MSBuild'i yükleme

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\Biniçindeki yükleme klasörünün altındadır.

Visual Studio kurulum programında Bireysel Bileşenlerkısmına gidin ve MSBuildonay kutusunu bulun. Yüklenecek diğer iş yüklerinden birini seçtiğinizde otomatik olarak seçilir.

MSBuild'i Visual Studio olmayan bir sisteme yüklemek için, indirmeler sayfasında Visual Studio 2022 için Derleme Araçları gidin. MSBuild almanın başka bir yolu da .NET SDK'sınıyüklemektir.

Visual Studio'nuz varsa MSBuild zaten yüklüdür. Visual Studio yükleme klasörünün altına yüklenir. Windows'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.

MSBuild'i Visual Studio içermeyen bir sisteme yüklemek için indirmeler sayfasında>Derleme Araçları'na gidin. MSBuild almanın başka bir 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. C++ proje türleri burada açıklanandan farklı bir derleme altyapısı kullanır. C++ projeleri için bkz. C++ projesi oluşturmak için MSBuild kullanma.

Proje dosyası oluşturmak için

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

    Arama kutusuna winformsyazın ve yeni Windows Forms Uygulaması (.NET Framework) oluştur seçin. Görüntülenen iletişim kutusunda Oluştur'i seçin.

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

  2. Proje dosyasını oluşturmak için Tamam ya da Oluştur butonuna 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ı, BuildApp adlı proje düğümü tarafından Çözüm Gezgini temsil edilir. Proje dosyasını incelemek için Visual Studio kod düzenleyicisini kullanabilirsiniz.

Proje dosyasını incelemek için

  1. Çözüm Gezgini'nde, BuildAppproje düğümüne tıklayın.

  2. Özellikleri tarayıcısında, Proje Dosyası özelliğinin BuildApp.csprojolduğunu fark edin. Tüm proje dosyaları, projsonekiyle adlandırılır. Visual Basic projesi oluşturmuş olsaydınız, proje dosya adı BuildApp.vbproj olacaktır.

  3. Proje düğümüne yeniden sağ tıklayın ve ardından BuildApp.csproj dosyasını düzenletıklayın.

    Proje dosyası kod düzenleyicisinde görünür.

Not

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

Hedef ve görev ekleme

Bu bölümde, derleme çıkışına bir ileti yazan proje dosyasına bir hedef eklersiniz. Sonraki bölümde MSBuild proje dosyalarındaki hedeflere ve görevlere kısa bir genel bakış sağlanır.

Hedefler ve görevler

Proje dosyaları, kök düğümü Project olan XML dosyalarıdır.

Çoğu .NET projesinin Sdk özniteliği vardır. Bu projeler SDK stili projeler olarak adlandırılır. SDK'ya başvurmak, MSBuild'in bu SDK için derleme altyapısını sağlayan bir dosya kümesini içeri aktardığını gösterir. Herhangi bir SDK'ya başvurmazsanız, MSBuild'i kullanmaya devam edebilirsiniz, yalnızca SDK'ya özgü tüm özelliklere ve hedeflere otomatik olarak sahip olmazsınız.

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

Özel amaçlar için birçok .NET SDK'sı varyasyonu vardır; .NET Proje SDK'larıaçıklanmaktadır.

Uygulama oluşturma işi, Hedef ve Görev öğeleriyle gerçekleştirilir.

  • Görev, bir derlemenin "atomu" olan en küçük çalışma birimidir. Görevler, giriş ve çıkışlara sahip olabilecek bağımsız yürütülebilir bileşenlerdir. Şu anda proje dosyasında başvurulmakta veya tanımlanmış görev yok. Aşağıdaki bölümlerde proje dosyasına görevler eklersiniz. Daha fazla bilgi için bkz. Görevler.

  • Hedef, belirli girişler göz önünde bulundurulduğunda genellikle dosya veya dosya kümesi gibi bazı çıkış yapıtları için derleme yönergelerini kapsüller. Genellikle bir dizi görevden oluşur, ancak kritik olarak, 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. İçeri Aktarma öğesi, içeri aktarılan projeleri belirtir. Örneğin, bir C# projesinde, varsayılan hedef Microsoft.CSharp.targetsdosyası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 derlemenin hedeflerini izler ve her hedefin en fazla bir kez derlenmesini garanti eder.

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

Hedef ve görev eklemek için

  1. İçeri Aktar ifadesinden veya Proje öğesinin başlangıcı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. HelloWorld hedefine satırlar ekleyerek sonuçta elde edilen bölümün şu şekilde görünmesini sağlama:

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

Message görevi, 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.

Message görevi, 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 "Merhaba" öğ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 dosyasındaki varsayılan hedefi seçmesidir. Visual Studio'da hedefinizi oluşturmak için, öğesinde Target veya AfterTargetsgibi BeforeTargets belirli öznitelikleri kullanarak bunu varsayılan hedeflerden birine zincirleyebilirsiniz. HelloWorld hedefinizin varsayılan Build hedef sonrasında çalıştırılmasını şu şekilde elde edersiniz:

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

Visual Studio'da derlemeyi yeniden çalıştırın ve Merhaba Dünya iletilerini görmek için Çıkış penceresinin Derleme sekmesine bakın.

Komut satırından MSBuild'i çalıştırarak da istenen hedefleri belirtebilirsiniz. Bu bölümde, HelloWorld hedefini oluşturmak için Visual Studio için Geliştirici Komut İstemi'nden MSBuild'i çalıştıracaksınız. Hedefi seçmek için -target veya -t komut satırı anahtarını kullanın.

Not

Aşağıdaki bölümlerde Geliştirici Komut İstemiKomut Penceresi olarak adlandıracağız.

Hedefi oluşturmak için:

  1. Eklediyseniz özniteliğini silin AfterTargets ve proje dosyasını kaydedin.

  2. Komut Penceresi'ni açın.

    Görev çubuğundaki arama kutusuna dev veya developer command promptgibi aracın adını yazmaya başlayın. Arama düzeninizle eşleşen yüklü uygulamaların listesi görüntülenir.

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

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

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

    msbuild buildapp.csproj -t:HelloWorld
    
  5. Komut penceresindeki çıktıyı inceleyin. "Merhaba" ve "Dünya" satırlarını görmeniz gerekir:

    Hello
    World
    

Kod düzenleyicisi ile komut penceresi arasında geçiş yaparak proje dosyasını değiştirebilir ve sonuçları hızla görebilirsiniz.

Yapı özellikleri

Yapı özellikleri, yapıya yol gösteren ad-değer çiftleridir. Proje dosyasının üst kısmında zaten çeşitli derleme özellikleri 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ğinin adı alt öğenin adıdır ve özelliğin değeri alt öğenin metin öğesidir. Örneğin

<TargetFrameworkVersion>net8.0</TargetFrameworkVersion>

TargetFrameworkVersionadlı özelliği tanımlar ve "net8.0" dize değerini verir

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

<TargetFrameworkVersion>net8.0</TargetFrameworkVersion>

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

Özellik değerini inceleyin

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 bu söz dizimini kullanın.

Özellik değeri 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şu satırı girip yürütebilirsiniz:

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

    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
    

Koşullu özellikler

Configuration gibi birçok özellik koşullu olarak tanımlanır, yani özellik öğesinde Condition özniteliği görüntülenir. 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.

Hemen hemen tüm MSBuild öğeleri bir Condition özniteliğine sahip olabilir. 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ı ayırır. MSBuildToolsPath, ayrılmış bir özelliğe örnektir. Rezerve özelliklere, diğer özellikler gibi $ gösterimiyle atıfta bulunulur. Daha fazla bilgi için bkz. Nasıl yapılır: Proje dosyasının adına veya konumuna başvurma ve MSBuild ayrılmış ve iyi bilinen özellikleri.

Ortam değişkenleri

Proje dosyalarındaki ortam değişkenlerine derleme özellikleriyle aynı şekilde başvurabilirsiniz. Örneğin, proje dosyanızda PATH ortam değişkenini kullanmak için $(Pathkullanın. Proje, ortam değişkeniyle 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, -property veya -p komut satırı anahtarı kullanılarak komut satırında 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 özellik değeri ayarlamak için:

  1. Komut Penceresişu satırı girip yürütebilirsiniz:

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

    Configuration is Release.
    

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

Özel karakterler

Bazı karakterlerin MSBuild proje dosyalarında özel bir anlamı vardır. Bu karakterlere örnek olarak noktalı virgül (;) ve yıldız işaretleri (*) verilebilir. Bu özel karakterleri proje dosyasında değişmez değer olarak kullanmak için, %<xx> karakterin ASCII onaltılık değerini temsil ettiği <xx>söz dizimi kullanılarak belirtilmelidir.

İleti görevini, daha okunabilir hale getirmek için Configuration özelliğinin değerini ö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 de şu satırla değiştirin:

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

  3. Komut Penceresişu satırı girip yürütebilirsiniz:

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

    $(Configuration) is "Debug"
    

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

Öğe oluştur

Öğe, derleme sistemine giriş olarak kullanılan, genellikle dosya adı olan bir bilgi parçasıdır. Örneğin, kaynak dosyaları temsil eden bir öğe koleksiyonu derlemek için Derle adlı bir göreve geçirilebilir.

Tüm öğeler ItemGroup öğelerinin alt öğeleridir. Öğe adı alt öğenin adı, öğe değeri ise alt öğenin Include özniteliğinin değeridir. Aynı ada sahip öğelerin değerleri, bu isimdeki öğe türlerinde 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 bir Include özniteliğinde bildirerek aynı öğe türünü oluşturur.

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

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

Not

Proje dosyası içeri aktarılan bir proje dosyası olsa bile dosya yolları MSBuild proje dosyasını içeren klasöre göredir. Import ve UsingTask öğelerini kullanırken olduğu gibi, bunun birkaç istisnası 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şu satırı girip yürütebilirsiniz:

    msbuild buildapp.csproj -t:HelloWorld
    
  4. Çıktıyı 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 noktalı virgülle ayrılır.

Öğe türünün ayırıcısını değiştirmek için aşağıdaki söz dizimini kullanın; burada ItemType öğe türü, Ayırıcı ise bir veya daha fazla ayırıcı karakterden oluşan bir dizedir:

@(ItemType, Separator)

Message görevini satır başına bir tane Derleme öğelerini görüntülemek için satır başı ve satır beslemelerini (%0A%0D) kullanacak şekilde 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ırla değiştirin:

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

  3. Komut Penceresişu satırı girip yürütebilirsiniz:

    msbuild buildapp.csproj -t:HelloWorld
    
  4. Çıktıyı 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
    

Dahil Et, Hariç Tut ve joker karakterler

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

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

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

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

görüntüleri klasöründeki dosya uzantısı .jpeg 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 .jpegdosya uzantısıyla .gif 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 Exclude özniteliğiyle bir öğe türünün dışında tutabilirsiniz. Örneğin

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

, adları Designerdizesini içeren dosyalar dışında, dosya uzantısı Compile olan tüm dosyaları öğe türüne ekler. Daha fazla örnek için bkz. Nasıl Yapılır: Dosyaları derlemeden çıkarma.

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.csdosyasını dışlamaz.

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

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

    <Message Text="XFiles item type contains @(XFiles)" />
    
  2. Bu öğe grubunu İçeri Aktar öğesinin hemen arkasına ekleyin:

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

  4. Komut Penceresişu satırı girip yürütebilirsiniz:

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

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

Öğe meta verileri

Öğeler, Include ve Exclude özniteliklerinden 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 alt öğesi olarak meta verilerin adıyla 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ğerine sahip Kültür meta verilerine 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ı ve MetaVeriAdı meta verilerin adıdır:

%(ItemType.MetaDataName)

Öğe meta verilerini incelemek için:

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

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

  3. Komut Penceresişu satırı girip yürütebilirsiniz:

    msbuild buildapp.csproj -t:HelloWorld
    
  4. Çıktıyı 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 göründüğüne 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, yaygın foreach döngüsü programlama yapısının MSBuild betiğiyle eşdeğerdir. Daha fazla bilgi için Kümelemebölümüne bakın.

İyi bilinen meta veriler

Öğe listesine her öğe eklendiğinde, bu öğeye bazı iyi bilinen meta veriler 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ırla değiştirin:

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

  3. Komut Penceresişu satırı girip yürütebilirsiniz:

    msbuild buildapp.csproj -t:HelloWorld
    
  4. Çıktıyı 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, Compile öğe 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ı ve <MetadataName> meta verilerin adıdır:

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

Örneğin, kaynak dosyaların öğe listesi, @(SourceFiles -> '%(Filename).obj')gibi bir ifade kullanılarak 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ırla değiştirin:

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

  3. Komut Penceresişu satırı girip yürütebilirsiniz:

    msbuild buildapp.csproj -t:HelloWorld
    
  4. Çıktıyı 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şturmadeneyin.

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