İngilizce dilinde oku

Aracılığıyla paylaş


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.

Not

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. dotnet build kullandığınızda veya kök proje öğesine Sdk özniteliğini eklediğinizde olduğu gibi bir SDK ile derleme, bu makalede ele alınmamıştır. Bkz. .NET Proje SDK'ları.

Standart .csproj dosyaları tarafından içeri aktarılan derleme mantığı, bu örnekten çok daha fazla seçeneği ve çok daha karmaşık bir derleme işlemini destekler.

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

Bu öğreticide, yalnızca bir metin düzenleyicisi kullanarak artımlı olarak temel bir proje dosyasının nasıl oluşturulacağı gösterilmektedir. İ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. Oluşturmayı kontrol etmek için özellikler ekleyin.

  6. Özellik değerlerini değiştirerek yapıyı denetleyin.

  7. Yapıya hedefler ekleyin.

  8. Derlemeyi hedefleri belirleyerek yönetin.

  9. Artımlı olarak oluşturun.

Bu öğreticide, 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. MSBuildkullanma .

Öğreticiyi tamamlamak için, izlenecek yol için gereken MSBuild ve C# derleyicisini içerdiğinden Visual Studio'nun yüklü olması 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.

Windows'da çalıştırıyorsanız Visual Studio içinGeliştirici Komut İstemi'ni kullanabilirsiniz. Bunu Windows görev çubuğundaki Windows arama kutusunda 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 ç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 gidin; örneğin, \Belgelerim\ veya \Desktop\ .

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

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

    C#
    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! ileti 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ü.

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

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

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

  • Uygulamanın derlenmesi için C# derleyicisinin çalıştırılması amacıyla bir Task öğesi.

Minimal bir MSBuild proje dosyası oluşturmak için

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

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

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

  2. Project düğümünün alt öğesi olarak bir Target düğümü ekleyin. düğümünü Buildolarak adlandırın.

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

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

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

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

Derleme hedefindeki görevler ardışık olarak yürütülür. Bu durumda, tek görev C# derleyici Csc görevidir. Derlenecek kaynak dosyaların listesini bekler ve bu, Compile öğesinin değeri tarafından verilir. Compile öğesi, Helloworld.cstek bir kaynak dosyaya başvurur.

Not

öğe öğ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:

XML
<Compile Include="*.cs" />

Uygulamayı oluşturma

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

  1. Komut isteminde msbuild helloworld.fromscratchproj -t:Buildyazı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! ileti görüntülenmelidir.

Not

Ayrıntı seviyesini 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.fromscratchproj -t:Build -verbosity:detailed

Derleme özellikleri ekle

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

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

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

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 hedefi ekleyeceksiniz).

  2. Proje dosyasında, bu PropertyGroup öğesini ilk Project öğesinden hemen sonra ekleyin.

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

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

    MakeDir görevi, hiçbir klasörün bu adla mevcut olmaması koşuluyla, OutputPath özelliği tarafından adlandırılmış bir klasör oluşturur.

  4. Bu OutputAssembly özniteliğini Csc görevine ekleyin:

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

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

  5. Değişikliklerinizi kaydedin.

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

XML
<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>

Not

Csc görevinin OutputAssembly özniteliğine eklemek yerine, OutputPath öğesinde belirttiğinizde klasör adının sonuna ters eğik çizgi (\) yol sınırlayıcısını eklemenizi öneririz. Bu yüzden

<OutputPath>Bin\</OutputPath>

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

daha iyi

<OutputPath>Bin</OutputPath>

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

Derleme özelliklerini test et

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 isteminde msbuild helloworld.fromscratchproj -t:Buildyazın.

    Bu, \Bin\ klasörünü oluşturur ve ardından C# derleyicisini çağırarak MSBuildSample uygulamasını oluşturur 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 Binyazın.

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

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

Derleme hedefleri ekleyin

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 önce çalışmaya zorlamak için DependsOnTargets özniteliğini kullanan bir Yeniden Oluşturma 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:

    XML
    <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. Yeniden Derleme hedefi, Clean ve Derleme hedefleri çalıştırılana kadar çalışmaz. Yeniden Derleme hedefinin hiçbir görevi olmasa da, Clean hedefinin Derleme hedefinden önce çalışmasına neden olur.

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

    XML
    <Project DefaultTargets="Build">
    

    Bu, Derleme hedefini varsayılan hedef olarak ayarlar.

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

XML
<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 et

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 hedeflerinin test edilmesi için

  1. Komut satırında msbuild helloworld.fromscratchproj -p:AssemblyName=Greetingsyazı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ı AssemblyName özelliğini geçersiz kılar ve Greetingsyeni değerini verir. Bu, \Bin\ klasöründe Greetings.exeyeni bir uygulamanın 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 Binyazın.

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

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

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

    Bu, varsayılan AssemblyName özellik değerine sahip olan MSBuildSampleuygulamasını kaldırmak için Clean görevini çalıştırır.

  5. msbuild helloworld.fromscratchproj -t:clean -p:AssemblyName=Greetingsyazarak 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 boş olduğunu doğrulamak için dir Binyazın.

  7. msbuild yazın.

    Bir proje dosyası belirtilmemiş olsa da MSBuild, geçerli klasörde yalnızca bir proje dosyası olduğundan helloworld.fromscratchproj 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 Binyazın.

Kademeli inşa etme

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.

Kademeli olarak inşa etmek için

  1. Proje dosyasında, bu öznitelikleri açılış Build hedefine ekleyin.

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

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

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

    XML
    <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.fromscratchproj 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'nin bir kısaltmasıdır.

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

    Tüm çıkış dosyaları giriş dosyalarına göre up-to-date 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 kaydeden bir proje dosyası gösterilmektedir.

Kod

XML
<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 örnek, bir Visual Basic uygulamasını derleyen ve çıkış dosyası adını içeren bir mesajı günlüğe kaydeden bir proje dosyasını göstermektedir.

Kod

XML
<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. MSBuild kullanma.