İ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:
PATH ortam değişkenini genişletin.
En düşük uygulama kaynak dosyası oluşturun.
En düşük MSBuild proje dosyasını oluşturun.
Proje dosyasını kullanarak uygulamayı oluşturun.
Derlemeyi denetlemek için özellikler ekleyin.
Özellik değerlerini değiştirerek derlemeyi denetleyin.
Derlemeye hedefler ekleyin.
Hedefleri belirterek derlemeyi kontrol edin.
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.
Komut isteminde, uygulamayı oluşturmak istediğiniz klasöre (örneğin, \Belgelerim\ veya \Masaüstü\) göz atın.
\HelloWorld\ adlı bir alt klasör oluşturun ve dizini içine gidecek şekilde değiştirin.
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!"); } }
Komut istemine csc helloworld.cs yazarak uygulamayı oluşturun.
Komut istemine helloworld yazarak uygulamayı test edin.
Merhaba , dünya! iletisi görüntülenmelidir.
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
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 öğesiCompile
içerir ve bir kaynak dosyayı öğe olarak belirtir.Düğümü
Target
, düğümünProject
alt öğesi olarak ekleyin. DüğümeBuild
adını verin.<Target Name="Build"> </Target>
Bu görev öğesini düğümün
Target
alt öğesi olarak ekleyin:<Csc Sources="@(Compile)"/>
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.
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.
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
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).Proje dosyasında, bu
PropertyGroup
öğeyi açılışProject
öğesinin hemen arkasına ekleyin:<PropertyGroup> <AssemblyName>MSBuildSample</AssemblyName> <OutputPath>Bin\</OutputPath> </PropertyGroup>
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ındanOutputPath
adlandırılmış bir klasör oluşturur.Bu
OutputAssembly
özniteliğiCsc
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ştirmesiniOutputPath
sağlar.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.
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.
\Bin\ klasörünün oluşturulduğunu ve MSBuildSample uygulamasını içerdiğini doğrulamak için dir Bin yazın.
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
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.
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
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ğeriniGreetings
verir. Bu, \Bin\ klasöründe yeni bir uygulama (Greetings.exe) oluşturulmasına neden olur.\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.
Greetings uygulamasını test edin (örneğin, Windows'da Bin\Greetings yazarak).
Merhaba , dünya! iletisi görüntülenmelidir.
msbuild helloworld.csproj -t:clean yazarak MSBuildSample uygulamasını silin.
Bu, varsayılan
AssemblyName
özellik değeriMSBuildSample
olan uygulamayı kaldırmak için Clean görevini çalıştırır.msbuild helloworld.csproj -t:clean -p:AssemblyName=Greetings yazarak Greetings uygulamasını silin.
Bu, verilen AssemblyName özellik değeri
Greetings
olan uygulamayı kaldırmak için Clean görevini çalıştırır.\Bin\ klasörünün artık boş olduğunu doğrulamak için dir Bin yazın.
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
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>
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.