MSBuild و Project Files – DEV Community

MSBuild چیست؟
MSBuild (Microsoft Build Engine) یک سیستم ساخت و پلتفرم برای ساخت برنامههای کاربردی، عمدتاً در اکوسیستم داتنت است. این برنامه نحوه کامپایل، آزمایش، بسته بندی و استقرار کد را با پردازش فایل های پروژه XML مانند .csproj
، .fsproj
و .vbproj
. ویژوال استودیو از MSBuild استفاده می کند، اما می توانید از MSBuild بدون ویژوال استودیو برای ساخت برنامه های دات نت استفاده کنید.
ویژگی های کلیدی MSBuild
- ساختمان پروژه:
- کد منبع شما را به زبان میانی (IL) کامپایل می کند و آن را در باینری ها بسته بندی می کند (
.dll
،.exe
). - وابستگی های پروژه (مثلاً بسته های NuGet) را برطرف می کند و آنها را در فرآیند ساخت گنجانده است.
- وظایف ساخت اضافی را اجرا می کند (مثلاً اجرای آزمایش ها، ایجاد بسته ها، وظایف استقرار).
- کد منبع شما را به زبان میانی (IL) کامپایل می کند و آن را در باینری ها بسته بندی می کند (
- پیکربندی مبتنی بر XML:
- از فایل های پروژه مبتنی بر XML برای تعریف دستورالعمل های ساخت در قالبی واضح و قابل توسعه استفاده می کند.
- از فایل های پروژه برای تعریف مراحل ساخت، تنظیمات، وابستگی ها و موارد دیگر استفاده می شود.
- بسیار قابل تنظیم:
- می توانید اهداف و وظایف سفارشی بنویسید تا عملکرد آن را گسترش دهید.
- یکپارچه شده با دات نت CLI:
- دستورات مانند
dotnet build
،dotnet restore
، وdotnet publish
از MSBuild در زیر هود برای ساخت پروژه ها استفاده کنید. - Visual Studio دارای پشتیبانی داخلی برای MSBuild است. برای ویرایشگرهایی که مانند VS Code و Zed با MSBuild ادغام نشدهاند، .NET CLI معمولاً برای مدیریت ساختها استفاده میشود.
- دستورات مانند
- اتوماسیون ساخت و ادغام CI/CD:
- با سیستمهای CI/CD مانند GitHub Actions، Azure Pipelines و Jenkins برای خودکارسازی ساختها، آزمایشها و استقرارها یکپارچه میشود.
- خطوط لوله ساخت و استقرار را به طور کامل در اسکریپت های MSBuild تعریف می کند.
- کراس پلتفرم:
- در ابتدا MSBuild تنها با ویندوز تبدیل شد و با .NET Core شروع به ساختن روی لینوکس و macOS کرد.
- تضمین می کند که منطق ساخت یکسان در سراسر سیستم عامل ها کار می کند و آن را برای خطوط لوله CI/CD ایده آل می کند.
فایل پروژه MSBuild
MSBuild یک قالب فایل پروژه مبتنی بر XML را پردازش می کند که برای توصیف موارد ساخت، پیکربندی ها و قوانین ساخت قابل استفاده مجدد برای سازگاری در بین پروژه ها پیکربندی شده است.
فایل های پروژه انواع مختلفی دارند مانند .csproj
برای پروژه های سی شارپ، .fsproj
برای پروژه های F# و .vbproj
برای پروژه های اساسی بصری
ساختار فایل پروژه
-
ریشه فایل:
-
فایل پروژه با عبارت شروع می شود
عنصر ریشه که به عنوان ظرف برای همه عناصر دیگر عمل می کند. -
پروژههای داتنت مدرن از پروژههای سبک SDK استفاده میکنند، جایی که SDK مجموعه از پیش تعریفشدهای از منطق ساخت، ویژگیها و واردات را مشخص میکند.
-
برخی از SDK های موجود:
-
Microsoft.NET.Sdk
: برای برنامه های کنسول یا کتابخانه ها. -
Microsoft.NET.Sdk.Web
: برای پروژه های وب مانند Web API یا برنامه های MVC. -
Microsoft.NET.Sdk.Worker
: برای خدمات کارگری و مشاغل پس زمینه. -
Aspire.AppHost.Sdk
: برای میزبان برنامه Aspire. -
MSTest.Sdk
: برای برنامه های MSTest.
-
-
روش های اعلام SDK:
-
-
خواص:
- جفتهای کلید-مقدار برای پیکربندی ساختها و تنظیمات کلی مانند چارچوب هدف، پیکربندی ساخت و مسیرهای خروجی استفاده میشوند.
-
آنها در یک تعریف می شوند
. چندگانه
بخش ها را می توان اضافه کرد.net9.0 -
شرایط را می توان برای فعال کردن پویا ویژگی ها مشخص کرد:
Condition="'$(Configuration)' == 'Release'"> true مثال هایی در مورد خواص:
-
چارچوب هدف
-
برای تعیین یک نسخه دات نت و
برای چندین نسخه:net9.0 net9.0;net40;net45 -
TFM های رایج:
net9.0
،net8.0
،netstandard2.1
،netcoreapp3.1
،net481
. TFM های خاص سیستم عامل (به عنوان مثال،net5.0-windows
،net6.0-ios
) شامل اتصالات مخصوص پلت فرم است. -
می توانید دستورالعمل های پیش پردازشگر کد منبع را برای کامپایل شرطی بر اساس چارچوب اضافه کنید:
#if NET40 Console.WriteLine("Target framework: .NET Framework 4.0"); #endif
-
-
ضمنی با استفاده از دستورالعمل ها
- با شروع با داتنت 6، پروژههای سی شارپ بهطور خودکار فضاهای نام رایج را از طریق دستورالعملهای جهانی ضمنی استفاده میکنند و نیاز به افزودن دستی آنها را کاهش میدهند.
- به طور پیش فرض برای SDK هایی مانند فعال است
Microsoft.NET.Sdk
،Microsoft.NET.Sdk.Web
،Microsoft.NET.Sdk.Worker
، وMicrosoft.NET.Sdk.WindowsDesktop
. -
برای فعال/غیرفعال کردن ویژگی استفاده می شود:enable -
دستورالعمل های استفاده از جهانی ضمنی اضافی را می توان با افزودن مشخص کرد
Using
موارد موجود در فایل پروژه:Include="System.IO.Pipes" />
-
هشدارهای کامپایلر و تحلیلگر کد
-
موارد:
- ورودیهای فرآیند ساخت، مانند فایلهای منبع، بستهها، وابستگیها و منابع را مشخص کنید.
- آنها در یک تعریف می شوند
. چندگانه
بخش ها را می توان اضافه کرد. -
برای سادگی، استفاده کنید
dotnet add package
برای اضافه کردن یک بسته به جای افزودن دستی آن به فایل پروژه.Include="Swashbuckle.AspNetCore" Version="6.6.2" /> Include="..\OtherProject\OtherProject.csproj" /> Include="Program.cs" />
-
وظایف:
- مراحل فردی در داخل اهداف برای انجام اقدامات خاص.
-
MSBuild شامل وظایف داخلی (مانند Copy، Exec، MakeDir، Csc) و پشتیبانی از کارهای سفارشی (با پیاده سازی)
ITask
یا مشتق از کلاس کمکیTask
)Name="CustomTarget"> Command="dotnet restore" /> SourceFiles="README.md" DestinationFolder="bin\docs\" /> Sources="@(Compile)" OutputAssembly="bin\MyApp.dll" />
-
اهداف:
- وظایف را گروه بندی کنید و بخش هایی از فایل پروژه را به عنوان نقاط ورودی برای فرآیند ساخت تعریف کنید.
-
BeforeTargets
،AfterTargets
وDependsOnTargets
از ویژگی ها می توان برای سفارش دادن به اهداف استفاده کرد.Name="PreBuild" BeforeTargets="PreBuildEvent"> Command="echo pre build" /> Name="PostBuild" AfterTargets="PostBuildEvent"> Command="echo post build" /> Name="PostPostBuild" DependsOnTargets="PostBuild"> Command="echo post post build" />
نمونه پروژه C# Web API
اجازه می دهد یک پروژه ساختگی C# Web API را از ابتدا و بدون استفاده ایجاد کنیم dotnet new
دستور تولید یک الگو در عوض، فایلهای مورد نیاز را به صورت دستی ایجاد میکنیم، از dotnet CLI برای ساخت و اجرای پروژه استفاده میکنیم و آن را با استفاده از یک درخواست ساده HTTP آزمایش میکنیم. با خیال راحت از ویرایشگر مورد علاقه خود برای ویرایش فایل ها استفاده کنید.
-
دایرکتوری پروژه را ایجاد کنید:
mkdir DemoApp cd DemoApp
-
ایجاد کنید
.csproj
فایل:vim DemoApp.csproj
-
مطالب زیر را به
.csproj
فایل:Sdk="Microsoft.NET.Sdk.Web"> net9.0 enable -
ایجاد کنید
Program.cs
فایل:vim Program.cs
-
مطالب زیر را به آن اضافه کنید
Program.cs
برای تعریف ساده/welcome
نقطه پایانی API:var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.MapGet("/welcome", () => "Hello, you!"); app.Run();
-
ساخت پروژه – باینری های خروجی در قسمت قرار می گیرند
bin/Debug/net9.0
دایرکتوری به صورت پیش فرضdotnet build
-
پروژه را اجرا کنید – خروجی نشان می دهد که برنامه در حال گوش دادن به موارد زیر است:
http://localhost:5000
dotnet run
-
پروژه را آزمایش کنید – خروجی باید این باشد:
Hello, you!
.curl http://localhost:5000/welcome
-
خروجی نهایی از طریق ویرایشگر Zed:
و بس! شما می توانید در اطراف بازی کنید .csproj
تنظیمات و کاوش سایر خواص.
منابع یادگیری
اگر می خواهید در مورد MSBuild و فایل های پروژه بیشتر بدانید به منابع زیر مراجعه کنید: