İzlenecek yol: Sıfırdan MSBuild proje dosyası oluşturma

.NET Framework'leri hedefleyen programlama dilleri, uygulama derleme işlemini açıklamak ve denetlemek için MSBuild proje dosyalarını kullanır. MsBuild proje dosyası oluşturmak için Visual Studio kullandığınızda, dosyaya otomatik olarak uygun XML eklenir. Ancak, XML'nin nasıl düzenlendiğinden ve bir derlemeyi denetlemek için nasıl değiştirebileceğinizi anlamak yararlı olabilir.

Dekont

MSBuild'in herhangi bir SDK'dan bağımsız olarak nasıl çalıştığına ilişkin temel bilgileri öğrenmek istiyorsanız bu makale uygundur. Sdk ile derleme, örneğin kök proje öğesine özniteliğini kullandığınızda dotnet build veya eklediğinizde Sdk bu makalede ele alınmamıştır. Bkz. .NET Proje SDK'ları.

C++ projesi için proje dosyası oluşturma hakkında bilgi için bkz . MSBuild (C++).

Bu izlenecek yol, yalnızca bir metin düzenleyicisi kullanarak artımlı olarak temel bir proje dosyasının nasıl oluşturulacağını gösterir. İzlenecek yol şu adımları izler:

  1. PATH ortam değişkenini genişletin.

  2. En düşük uygulama kaynak dosyası oluşturun.

  3. En düşük MSBuild proje dosyasını oluşturun.

  4. Proje dosyasını kullanarak uygulamayı oluşturun.

  5. Derlemeyi denetlemek için özellikler ekleyin.

  6. Özellik değerlerini değiştirerek derlemeyi denetleyin.

  7. Derlemeye hedefler ekleyin.

  8. Hedefleri belirterek derlemeyi kontrol edin.

  9. Artımlı olarak derleyin.

Bu kılavuzda, komut isteminde projenin nasıl derlendiği ve sonuçların nasıl incelendiği gösterilir. MSBuild ve komut isteminde MSBuild'i çalıştırma hakkında daha fazla bilgi için bkz . İzlenecek Yol: MSBuild Kullanma.

İzlenecek yolu tamamlamak için, izlenecek yol için gereken MSBuild ve C# derleyicisini içerdiğinden Visual Studio'yu yüklemiş olmanız gerekir.

Yolu genişletme

MSBuild'i kullanabilmeniz için önce PATH ortam değişkenini gerekli tüm araçları içerecek şekilde genişletmeniz gerekir. Visual Studio için Geliştirici Komut İstemi'ni kullanabilirsiniz. Windows görev çubuğundaki arama kutusunda Windows 10'da arayın. Ortamı normal bir komut isteminde veya bir betik ortamında ayarlamak için, Visual Studio yüklemesinin Common7/Tools alt klasöründe VSDevCmd.bat komutunu çalıştırın.

En düşük uygulama oluşturma

Bu bölümde, bir metin düzenleyicisi kullanarak en düşük C# uygulama kaynak dosyasının nasıl oluşturulacağı gösterilmektedir.

  1. Komut isteminde, uygulamayı oluşturmak istediğiniz klasöre (örneğin, \Belgelerim\ veya \Masaüstü\) göz atın.

  2. \HelloWorld\ adlı bir alt klasör oluşturun ve dizini içine gidecek şekilde değiştirin.

  3. Metin düzenleyicisinde yeni bir HelloWorld.cs dosyası oluşturun ve aşağıdaki kodu kopyalayıp yapıştırın:

    using System;
    
    class HelloWorld
    {
        static void Main()
        {
    #if DebugConfig
            Console.WriteLine("WE ARE IN THE DEBUG CONFIGURATION");
    #endif
    
            Console.WriteLine("Hello, world!");
        }
    }
    
  4. Komut istemine csc helloworld.cs yazarak uygulamayı oluşturun.

  5. Komut istemine helloworld yazarak uygulamayı test edin.

    Merhaba , dünya! iletisi görüntülenmelidir.

  6. Yürütülebilir dosyayı silin.

En düşük MSBuild proje dosyası oluşturma

Artık en az uygulama kaynak dosyanız olduğuna göre, uygulamayı oluşturmak için en düşük proje dosyasını oluşturabilirsiniz. Bu proje dosyası aşağıdaki öğeleri içerir:

  • Gerekli kök Project düğüm.

  • ItemGroup Öğe öğelerini içeren bir düğüm.

  • Uygulama kaynak dosyasına başvuran bir öğe öğesi.

  • Target Uygulamayı derlemek için gereken görevleri içeren bir düğüm.

  • Task Uygulamayı derlemek için C# derleyicisini başlatmak için bir öğe.

En az MSBuild proje dosyası oluşturmak için

  1. Metin düzenleyicisinde yeni bir HelloWorld.csproj dosyası oluşturun ve aşağıdaki kodu girin:

    <Project>
      <ItemGroup>
        <Compile Include="helloworld.cs" />
      </ItemGroup>
    </Project>
    

    Bu ItemGroup öğe öğesi Compile içerir ve bir kaynak dosyayı öğe olarak belirtir.

  2. Düğümü Target , düğümün Project alt öğesi olarak ekleyin. Düğüme Buildadını verin.

    <Target Name="Build">
    </Target>
    
  3. Bu görev öğesini düğümün Target alt öğesi olarak ekleyin:

    <Csc Sources="@(Compile)"/>
    
  4. Bu proje dosyasını kaydedin ve Helloworld.csproj olarak adlandırın.

Minimum proje dosyanız aşağıdaki koda benzemelidir:

<Project>
  <ItemGroup>
    <Compile Include="helloworld.cs"/>
  </ItemGroup>
  <Target Name="Build">
    <Csc Sources="@(Compile)"/>
  </Target>
</Project>

Derleme hedefindeki görevler sırayla yürütülür. Bu durumda, tek görev C# derleyici Csc görevidir. Derlenecek kaynak dosyaların listesini bekler ve bu, öğenin değeri Compile tarafından verilir. Öğe Compile yalnızca bir kaynak dosyaya başvurur: Helloworld.cs.

Dekont

item öğesinde, .cs dosya adı uzantısına sahip tüm dosyalara başvurmak için yıldız joker karakterini (*) aşağıdaki gibi kullanabilirsiniz:

<Compile Include="*.cs" />

Uygulama oluşturma

Şimdi uygulamayı derlemek için yeni oluşturduğunuz proje dosyasını kullanın.

  1. Komut istemine msbuild helloworld.csproj -t:Build yazın.

    Bu, Helloworld uygulamasını oluşturmak için C# derleyicisini çağırarak Helloworld proje dosyasının Derleme hedefini oluşturur.

  2. Helloworld yazarak uygulamayı test edin.

    Merhaba , dünya! iletisi görüntülenmelidir.

Dekont

Ayrıntı düzeyini artırarak derleme hakkında daha fazla ayrıntı görebilirsiniz. Ayrıntı düzeyini "ayrıntılı" olarak ayarlamak için komut istemine şu komutu yazın:

msbuild helloworld.csproj -t:Build -verbosity:detailed

Derleme özellikleri ekleme

Derlemeyi daha fazla denetlemek için proje dosyasına derleme özellikleri ekleyebilirsiniz. Şimdi şu özellikleri ekleyin:

  • AssemblyName Uygulamanın adını belirtmek için bir özellik.

  • Uygulamayı OutputPath içerecek klasörü belirtmek için bir özellik.

Derleme özellikleri eklemek için

  1. Mevcut uygulama yürütülebilir dosyasını silin (daha sonra, eski çıkış dosyalarının silinmesini işlemek için bir Clean hedef ekleyeceksiniz).

  2. Proje dosyasında, bu PropertyGroup öğeyi açılış Project öğesinin hemen arkasına ekleyin:

    <PropertyGroup>
      <AssemblyName>MSBuildSample</AssemblyName>
      <OutputPath>Bin\</OutputPath>
    </PropertyGroup>
    
  3. Bu görevi, görevden hemen önce Derleme hedefine Csc ekleyin:

    <MakeDir Directories="$(OutputPath)" Condition="!Exists('$(OutputPath)')" />
    

    Görev, MakeDir şu anda bu ada göre bir klasör olmaması koşuluyla özelliği tarafından OutputPath adlandırılmış bir klasör oluşturur.

  4. Bu OutputAssembly özniteliği Csc göreve ekleyin:

    <Csc Sources="@(Compile)" OutputAssembly="$(OutputPath)$(AssemblyName).exe" />
    

    Bu, C# derleyicisine özelliği tarafından adlandırılmış bir derleme oluşturmasını AssemblyName ve bunu özelliği tarafından adlandırılan klasöre yerleştirmesini OutputPath sağlar.

  5. Değişikliklerinizi kaydedin.

Proje dosyanız artık aşağıdaki koda benzemelidir:

<Project>
  <PropertyGroup>
    <AssemblyName>MSBuildSample</AssemblyName>
    <OutputPath>Bin\</OutputPath>
  </PropertyGroup>
  <ItemGroup>
    <Compile Include="helloworld.cs" />
  </ItemGroup>
  <Target Name="Build">
    <MakeDir Directories="$(OutputPath)" Condition="!Exists('$(OutputPath)')" />
    <Csc Sources="@(Compile)" OutputAssembly="$(OutputPath)$(AssemblyName).exe" />
  </Target>
</Project>

Dekont

Öğede belirttiğinizdeOutputPath, görevin özniteliğine eklemek yerine klasör adının sonuna ters eğik çizgi (\) yol sınırlayıcısını Csc eklemenizi OutputAssembly öneririz. Yani:

<OutputPath>Bin\</OutputPath>

OutputAssembly="$(OutputPath)$(AssemblyName).exe" />

daha iyi

<OutputPath>Bin</OutputPath>

OutputAssembly="$(OutputPath)\$(AssemblyName).exe" />

Derleme özelliklerini test etme

Artık çıkış klasörünü ve uygulama adını belirtmek için derleme özelliklerini kullandığınız proje dosyasını kullanarak uygulamayı oluşturabilirsiniz.

  1. Komut istemine msbuild helloworld.csproj -t:Build yazın.

    Bu, \Bin\ klasörünü oluşturur ve ardından MSBuildSample uygulamasını oluşturmak için C# derleyicisini çağırır ve \Bin\ klasörüne yerleştirir.

  2. \Bin\ klasörünün oluşturulduğunu ve MSBuildSample uygulamasını içerdiğini doğrulamak için dir Bin yazın.

  3. Yürütülebilir dosyayı çalıştırmak için Bin\MSBuildSample yazarak uygulamayı test edin.

    Merhaba , dünya! iletisi görüntülenmelidir.

Derleme hedefleri ekleme

Ardından, proje dosyasına aşağıdaki gibi iki hedef daha ekleyin:

  • Eski dosyaları silip temizleyen bir hedef.

  • Clean görevini Derleme görevinden DependsOnTargets önce çalışmaya zorlamak için özniteliğini kullanan yeniden derleme hedefi.

Artık birden çok hedefiniz olduğuna göre, Derleme hedefini varsayılan hedef olarak ayarlayabilirsiniz.

Derleme hedefleri eklemek için

  1. Proje dosyasında bu iki hedefi Derleme hedefinin hemen arkasına ekleyin:

    <Target Name="Clean" >
      <Delete Files="$(OutputPath)$(AssemblyName).exe" />
    </Target>
    <Target Name="Rebuild" DependsOnTargets="Clean;Build" />
    

    Clean hedefi, uygulamayı silmek için Delete görevini çağırır. Hem Clean hedefi hem de Derleme hedefi çalıştırılmadan Yeniden Derleme hedefi çalışmaz. Yeniden Derleme hedefinin hiçbir görevi olmasa da, Clean hedefinin Derleme hedefine göre çalışmasına neden olur.

  2. Bu DefaultTargets özniteliği açılış Project öğesine ekleyin:

    <Project DefaultTargets="Build">
    

    Bu, Derleme hedefini varsayılan hedef olarak ayarlar.

Proje dosyanız artık aşağıdaki koda benzemelidir:

<Project DefaultTargets="Build">
  <PropertyGroup>
    <AssemblyName>MSBuildSample</AssemblyName>
    <OutputPath>Bin\</OutputPath>
  </PropertyGroup>
  <ItemGroup>
    <Compile Include="helloworld.cs" />
  </ItemGroup>
  <Target Name="Build">
    <MakeDir Directories="$(OutputPath)" Condition="!Exists('$(OutputPath)')" />
    <Csc Sources="@(Compile)" OutputAssembly="$(OutputPath)$(AssemblyName).exe" />
  </Target>
  <Target Name="Clean" >
    <Delete Files="$(OutputPath)$(AssemblyName).exe" />
  </Target>
  <Target Name="Rebuild" DependsOnTargets="Clean;Build" />
</Project>

Derleme hedeflerini test etme

Proje dosyasının bu özelliklerini test etmek için yeni derleme hedeflerini kullanabilirsiniz:

  • Varsayılan derlemeyi oluşturma.

  • Komut isteminde uygulama adını ayarlama.

  • Başka bir uygulama oluşturulmadan önce uygulamayı silme.

  • Başka bir uygulama oluşturmadan uygulamayı silme.

Derleme hedeflerini test etmek için

  1. Komut istemine msbuild helloworld.csproj -p:AssemblyName=Greetings yazın.

    Hedefi açıkça ayarlamak için -t anahtarını kullanmadığınızdan, MSBuild varsayılan Derleme hedefini çalıştırır. -p anahtarı özelliğini geçersiz kılar AssemblyName ve yeni değerini Greetingsverir. Bu, \Bin\ klasöründe yeni bir uygulama (Greetings.exe) oluşturulmasına neden olur.

  2. \Bin\ klasörünün hem MSBuildSample uygulamasını hem de yeni Greetings uygulamasını içerdiğini doğrulamak için dir Bin yazın.

  3. Greetings uygulamasını test edin (örneğin, Windows'da Bin\Greetings yazarak).

    Merhaba , dünya! iletisi görüntülenmelidir.

  4. msbuild helloworld.csproj -t:clean yazarak MSBuildSample uygulamasını silin.

    Bu, varsayılan AssemblyName özellik değeri MSBuildSampleolan uygulamayı kaldırmak için Clean görevini çalıştırır.

  5. msbuild helloworld.csproj -t:clean -p:AssemblyName=Greetings yazarak Greetings uygulamasını silin.

    Bu, verilen AssemblyName özellik değeri Greetingsolan uygulamayı kaldırmak için Clean görevini çalıştırır.

  6. \Bin\ klasörünün artık boş olduğunu doğrulamak için dir Bin yazın.

  7. msbuild yazın.

    Bir proje dosyası belirtilmemiş olsa da, geçerli klasörde yalnızca bir proje dosyası olduğundan MSBuild helloworld.csproj dosyasını oluşturur. Bu, MSBuildSample uygulamasının \Bin\ klasöründe oluşturulmasına neden olur.

    \Bin\ klasörünün MSBuildSample uygulamasını içerdiğini doğrulamak için dir Bin yazın.

Artımlı olarak derleme

MSBuild'e hedef oluşturmasını yalnızca hedefin bağımlı olduğu kaynak dosyalar veya hedef dosyalar değişmişse söyleyebilirsiniz. MSBuild, dosyanın değişip değişmediğini belirlemek için zaman damgasını kullanır.

Artımlı olarak derlemek için

  1. Proje dosyasında, şu öznitelikleri oluşturma hedefini açma bölümüne ekleyin:

    Inputs="@(Compile)" Outputs="$(OutputPath)$(AssemblyName).exe"
    

    Bu, Derleme hedefinin öğe grubunda belirtilen giriş dosyalarına Compile bağlı olduğunu ve çıkış hedefinin uygulama dosyası olduğunu belirtir.

    Sonuçta elde edilen Derleme hedefi aşağıdaki koda benzemelidir:

    <Target Name="Build" Inputs="@(Compile)" Outputs="$(OutputPath)$(AssemblyName).exe">
      <MakeDir Directories="$(OutputPath)" Condition="!Exists('$(OutputPath)')" />
      <Csc Sources="@(Compile)" OutputAssembly="$(OutputPath)$(AssemblyName).exe" />
    </Target>
    
  2. Komut istemine msbuild -v:d yazarak Derleme hedefini test edin.

    Helloworld.csproj dosyasının varsayılan proje dosyası olduğunu ve Derleme'nin varsayılan hedef olduğunu unutmayın.

    -v:d anahtarı, daha önce kullandığınız -verbosity:detailed kısaltmasıdır.

    Çıkışı önceden oluşturmuşsanız, şu satırlar görüntülenmelidir:

    Tüm çıkış dosyaları giriş dosyalarıyla ilgili olarak güncel olduğundan hedef "Derleme" atlanıyor.

    Uygulamanın son oluşturulmasından bu yana kaynak dosyalardan hiçbiri değişmediğinden MSBuild Derleme hedefini atlar.

C# örneği

Aşağıdaki örnekte, bir C# uygulamasını derleyen ve çıkış dosyası adını içeren bir iletiyi günlüğe kaydeden bir proje dosyası gösterilmektedir.

Kod

<Project DefaultTargets = "Compile">

    <!-- Set the application name as a property -->
    <PropertyGroup>
        <appname>HelloWorldCS</appname>
    </PropertyGroup>

    <!-- Specify the inputs by type and file name -->
    <ItemGroup>
        <CSFile Include = "*.cs"/>
    </ItemGroup>

    <Target Name="Compile">
        <!-- Run the C# compilation using input files of type CSFile -->
        <CSC
            Sources = "@(CSFile)"
            OutputAssembly = "$(appname).exe">
            <!-- Set the OutputAssembly attribute of the CSC task
            to the name of the executable file that is created -->
            <Output
                TaskParameter = "OutputAssembly"
                ItemName = "EXEFile" />
        </CSC>
        <!-- Log the file name of the output file -->
        <Message Text="The output file is @(EXEFile)"/>
    </Target>
</Project>

Visual Basic örneği

Aşağıdaki örnekte, Visual Basic uygulamasını derleyen ve çıkış dosyası adını içeren bir iletiyi günlüğe kaydeden bir proje dosyası gösterilmektedir.

Kod

<Project DefaultTargets = "Compile">

    <!-- Set the application name as a property -->
    <PropertyGroup>
        <appname>HelloWorldVB</appname>
    </PropertyGroup>

    <!-- Specify the inputs by type and file name -->
    <ItemGroup>
        <VBFile Include = "consolehwvb1.vb"/>
    </ItemGroup>

    <Target Name = "Compile">
        <!-- Run the Visual Basic compilation using input files of type VBFile -->
        <VBC
            Sources = "@(VBFile)"
            OutputAssembly= "$(appname).exe">
            <!-- Set the OutputAssembly attribute of the VBC task
            to the name of the executable file that is created -->
            <Output
                TaskParameter = "OutputAssembly"
                ItemName = "EXEFile" />
        </VBC>
        <!-- Log the file name of the output file -->
        <Message Text="The output file is @(EXEFile)"/>
    </Target>
</Project>

Sırada ne var?

Visual Studio, bu kılavuzda gösterilen işlerin çoğunu otomatik olarak gerçekleştirebilir. MSBuild proje dosyalarını oluşturmak, düzenlemek, derlemek ve test etmek için Visual Studio'yu kullanmayı öğrenmek için bkz . İzlenecek yol: MSBuild kullanma.