برنامه نویسی

MSBuild و Project Files – DEV Community

MSBuild چیست؟

MSBuild (Microsoft Build Engine) یک سیستم ساخت و پلتفرم برای ساخت برنامه‌های کاربردی، عمدتاً در اکوسیستم دات‌نت است. این برنامه نحوه کامپایل، آزمایش، بسته بندی و استقرار کد را با پردازش فایل های پروژه XML مانند .csproj، .fsproj و .vbproj. ویژوال استودیو از MSBuild استفاده می کند، اما می توانید از MSBuild بدون ویژوال استودیو برای ساخت برنامه های دات نت استفاده کنید.


ویژگی های کلیدی MSBuild

  1. ساختمان پروژه:
    • کد منبع شما را به زبان میانی (IL) کامپایل می کند و آن را در باینری ها بسته بندی می کند (.dll، .exe).
    • وابستگی های پروژه (مثلاً بسته های NuGet) را برطرف می کند و آنها را در فرآیند ساخت گنجانده است.
    • وظایف ساخت اضافی را اجرا می کند (مثلاً اجرای آزمایش ها، ایجاد بسته ها، وظایف استقرار).
  2. پیکربندی مبتنی بر XML:
    • از فایل های پروژه مبتنی بر XML برای تعریف دستورالعمل های ساخت در قالبی واضح و قابل توسعه استفاده می کند.
    • از فایل های پروژه برای تعریف مراحل ساخت، تنظیمات، وابستگی ها و موارد دیگر استفاده می شود.
  3. بسیار قابل تنظیم:
    • می توانید اهداف و وظایف سفارشی بنویسید تا عملکرد آن را گسترش دهید.
  4. یکپارچه شده با دات نت CLI:
    • دستورات مانند dotnet build، dotnet restore، و dotnet publish از MSBuild در زیر هود برای ساخت پروژه ها استفاده کنید.
    • Visual Studio دارای پشتیبانی داخلی برای MSBuild است. برای ویرایشگرهایی که مانند VS Code و Zed با MSBuild ادغام نشده‌اند، .NET CLI معمولاً برای مدیریت ساخت‌ها استفاده می‌شود.
  5. اتوماسیون ساخت و ادغام CI/CD:
    • با سیستم‌های CI/CD مانند GitHub Actions، Azure Pipelines و Jenkins برای خودکارسازی ساخت‌ها، آزمایش‌ها و استقرارها یکپارچه می‌شود.
    • خطوط لوله ساخت و استقرار را به طور کامل در اسکریپت های MSBuild تعریف می کند.
  6. کراس پلتفرم:
    • در ابتدا 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 آزمایش می‌کنیم. با خیال راحت از ویرایشگر مورد علاقه خود برای ویرایش فایل ها استفاده کنید.

  1. دایرکتوری پروژه را ایجاد کنید:

    mkdir DemoApp
    cd DemoApp
    
  2. ایجاد کنید .csproj فایل:

    vim DemoApp.csproj
    
  3. مطالب زیر را به .csproj فایل:

     Sdk="Microsoft.NET.Sdk.Web">
    
      
        net9.0
        enable
      
    
    
    
  4. ایجاد کنید Program.cs فایل:

    vim Program.cs
    
  5. مطالب زیر را به آن اضافه کنید Program.cs برای تعریف ساده /welcome نقطه پایانی API:

    var builder = WebApplication.CreateBuilder(args);
    var app = builder.Build();
    
    app.MapGet("/welcome", () => "Hello, you!");
    app.Run();
    
  6. ساخت پروژه – باینری های خروجی در قسمت قرار می گیرند bin/Debug/net9.0 دایرکتوری به صورت پیش فرض

    dotnet build
    
  7. پروژه را اجرا کنید – خروجی نشان می دهد که برنامه در حال گوش دادن به موارد زیر است: http://localhost:5000

    dotnet run
    
  8. پروژه را آزمایش کنید – خروجی باید این باشد: Hello, you!.

    curl http://localhost:5000/welcome
    
  9. خروجی نهایی از طریق ویرایشگر Zed:

پروژه Web API از طریق Zed


و بس! شما می توانید در اطراف بازی کنید .csproj تنظیمات و کاوش سایر خواص.


منابع یادگیری

اگر می خواهید در مورد MSBuild و فایل های پروژه بیشتر بدانید به منابع زیر مراجعه کنید:

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا