MSBuild Nedir?
.NET platformunda yazılım geliştirirken kullanılan ve kodların uygun bir şekilde derlenmesini sağlayan MSBuild otomasyon motoru ile ilgili bilgiler yer alıyor.
MSBuild Nedir?
MSBuild veya Microsoft Build Engine genellikle .NET platformunda yer alan programlama dillerinin derlenmesi sırasında kullanılan otomasyon ve inşa aracıdır.
Aşağıdaki yazılan kodların düz metinden bir farkı yoktur.
using System;
class Program {
static void Main() {
Console.WriteLine("Merhaba C#");
}
}
Yazılan kodların çalışması için öncelikle çalıştırılabilir hale getirilmesi gerekir.
Kodların çalıştırılabilir hale getirilmesi işlemine derleme denir ve derleyiciler tarafından yapılır.
Derleme işlemi birçok programlama diline göre farklılık gösterse de temel olarak <derleyici> <dosya> biçiminde yapılır.
NOT: Derleyicinin komut yorumlayıcısında çalışabilmesi için ortam değişkenleri veya çevre değişkenleri olarak adlandırılan alana eklenmesi gerekir.
Yukarıda yer alan C# kodları merhaba.cs olarak kaydedilip aşağıdaki komut ile çalıştırılabilir hale gelecektir.
csc merhaba.cs
Aşağıdaki kodlar benzer yöntemle çalıştırılmak istendiğinde çalışmayacaktır.
using System;
using System.Numerics;
class Program {
static void Main() {
var bigInteger = new BigInteger();
bigInteger = 1;
Console.WriteLine(bigInteger);
}
}
Yazılan kod içerisinde Numerics kütüphanesi eklenmiş ancak kütüphane kodlarını derleyici bilmediği için derlenememiştir.
Kodların derlenebilmesi için derleyiciye aşağıdaki gibi kütüphane yolunun verilmesi gerekir.
csc merhaba.cs /r:System.Numerics.dll
Benzer şekilde çalıştırılabilir dosyanın ismi aşağıdaki gibi belirlenebilir.
csc /out:programim.exe merhaba.cs /r:System.Numerics.dll
Yazılan kodlar ve kullanılan kütüphaneler arttıkça derleme işlemi daha da zorlaşacaktır.
Bu durumda derleyiciye yazılan ek parametrelerin (parameters, flags) bir dosyaya saklanarak çalıştırılması faydalı olacaktır.
İşte burada MSBuild devreye girerek oluşturulacak XML tabanlı derleme ayarlarının yönetimini sağlar.
Aslında bu işlem .NET platformunun vazgeçilmez editörü Visual Studio ile otomatik olarak yapılmaktadır.
Örnek olarak en başta yer alan işlemi .csproj uzantılı MSBuild dosyasına aşağıdaki biçiminde yazabiliriz.
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Compile Include="merhaba.cs" />
</ItemGroup>
<Target Name="Derle">
<Csc Sources="@(Compile)" />
</Target>
</Project>
Yukarıdaki örnekte ItemGroup alanında derlenecek dosyayı Compile etiketi ile belirtik ve Target bölümünde derleme işlemini yaptık.
ItemGroup içerisinde yer alan Compile etiket Dosya olsaydı Target içeriği @(Dosya) şeklinde olacaktı.
Target etiketi name özelliği farklı görevler tanımlamaya imkan verir.
Örneğin derleme işlemi öncesi dosyaların silinmesi, dosyaların kopyalanması vb. işlemler yapılabilir.
Ancak standart etiketlerin kullanılması ileride oluşabilecek sorunların çözümünde faydalı olacaktır.
MSBuild derleme işlemi sırasında kullanabilmemiz için çeşitli ön tanımlı değerlere sahiptir.
Bu değerler kullanılarak derleme işlemi daha kolay bir şekilde yapılabilir.
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="12">
<!-- Referanslar -->
<ItemGroup>
<Reference Include="System.Numerics" />
</ItemGroup>
<!-- Dosyalar -->
<ItemGroup>
<Compile Include="merhaba.cs" />
</ItemGroup>
<!-- Ön tanımlı değerler dahil ediliyor -->
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
</Project>
MSBuild ayrıca koşullu işlemler yapmak gibi farklı derleme koşuluna göre farklı işlem yapma yeteneğine sahiptir.
Bu işlemler Visual Studio tarafından yapıldığında pek fazla elle yazılmaz.
Ancak büyük çaplı projelerde ihtiyaca göre özel MSBuild dosyaları hazırlanabilir.
.NET Core
Microsoft .NET Core platformunda MSBuild yerine project.json dosyasını kullanmış daha sonra MSBuild yapısında önemli değişiklikler yaparak dönüş yapmıştır.
Örnek MSBuild dosyası aşağıda yer almaktadır.
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.1.2" PrivateAssets="All" />
</ItemGroup>
</Project>
İnşa ve otomasyon süreçlerinin herhangi bir dil için öğrenmek diğerlerini öğrenmede kolaylık sağlayacaktır.
Örnek olarak C/C++ için kullanılan ve ilk inşa otomasyon aracı make verilebilir.
.NET Derslerine buradan ulaşabilirsiniz.
Hayırlı günler dilerim.