بعد مدت ها امروز میخوام یه روش ساده برای بیلد کردن پروژه ها بگم.
گاهی اوقات بنا به دلایلی شما مجبور هستید کانفیگ های مختلفی از یک پروژه داشته باشید و برای بیلد کردن هر کدوم باید بصورت دستی کانفیگ هارو بیلد کنید.
مثلا من یه پروژه دارم که کانفیگ های مخصوصی برای دات نت 4، 4.5، 4.6، 4.7، 4.8 و دات کور 3 داره.
و اگه بخام از پروژه Release بگیرم هر سری باید کانفیگ رو عوض کنم و بیلد بکنم، و حالا شما در نظر بگیر اگه تغییر کوچیکی هم تو سورس بدم دوباره باید مراحل رو تکرار کنم که زمان بر هستش.
راه حل اینه که بیایم از یه اسکریپت برای بیلد کردن پروژه استفاده کنیم که بصورت خودکار این مراحل رو انجام بده. هم خودمون میتونیم تو پاورشل یه اسکریپت بصورت دستی بنویسیم و کارمون انجام بدیم هم میتونیم از اسکریپت های آماده مثل کیک Cake که کراس پلتفرم هم هستش برای اینکار استفاده بکنیم.
برای شروع کافیه دستور زیر رو داخل پاورشل اجرا کنید تا اسکریپت دانلود بشه
Invoke-WebRequest https://cakebuild.net/download/bootstrapper/windows -OutFile build.ps1
برای مک از دستور زیر استفاده کنید
curl -Lsfo build.sh https://cakebuild.net/download/bootstrapper/osx
و برای لینوکس از این دستور
curl -Lsfo build.sh https://cakebuild.net/download/bootstrapper/linux
حالا یه فایل به اسم Build.ps1 دارید و یه فایل به اسم Build.cake
وارد فایل Build.cake بشید و فایل بیلد رو کانفیگ کنید.
در اینجا من کانفیگ خودم رو قرار میدم که برای بیلد کردن یه پروژه دات نت و دات نت کور هستش
var target = Argument("target", "Build");
Task("Clean")
.Does(() =>
{
CleanDirectory("lib");
});
Task("Build")
.IsDependentOn("Clean")
.Does(() =>
{
var vsLatest = VSWhereLatest();
var msBuildPath = vsLatest?.CombineWithFilePath("./MSBuild/Current/Bin/MSBuild.exe");
NuGetRestore("Ganjineh/Ganjineh/Ganjineh.csproj");
var settingsNet47 = new MSBuildSettings
{
Configuration = "Release",
ToolPath = msBuildPath,
}.WithProperty("OutputPath", MakeAbsolute(Directory("lib/net")).FullPath);
var settingsCore30 = new DotNetCoreBuildSettings
{
Framework = "netcoreapp3.1",
Configuration = "Release",
OutputDirectory = "lib/netcoreapp3.1"
};
MSBuild("Ganjineh/Ganjineh/Ganjineh.csproj", settingsNet47);
DotNetCoreBuild("mahdi/mahdi.csproj", settingsCore30);
});
RunTarget(target);
خب توی کانفیگ بالا اول پروژه رو کلین کردیم که خروجی های قبلی پاک بشه بعد داخل Task مربوط به بیلدT اول مسیر MsBuild رو معرفی میکنیم، بعدش از NugetRestore استفاده میکنیم تا اگر پروژه بسته ناگت داشت ریستور بشه (اگه بسته ناگت ندارید این کد رو میتونید حذف کنید) بعدش کانفیگ دات نت رو مشخص میکنیم که میخوایم ریلیز باشه و در پوشه ای به اسم lib/net خروجی گرفته بشه. برای دات نت کور 3 هم یه کانفیگ درست میکنیم و نسخه فریمورکش رو هم مشخص میکنیم. در پایان با دستور MSBuild پروژه دات نت رو بیلد میکنیم و با دستور DotNetCoreBuild پروژه دات نت کور 3 رو بیلد میکنیم.
حالا کافیه فایل رو ذخیره کنیم و هر موقع که نیاز به بیلد کردن پروژه داشتیم دستور زیر رو داخل پاورشل اجرا کنیم
.\Build.ps1