Məzmuna keç
Educora
İrəli20 dəq11 / 16

.NET CLI, layihələr və NuGet

`dotnet` əmri ilə layihələr yarat, yığ, işə sal və test et, onları solution-da birləşdir və NuGet paketləri qoş.

Özünü yoxla
Bu dərsdə öyrənəcəksən
  • dotnet new, build, run, test əmrlərindən istifadə etmək
  • SDK üslublu .csproj faylını oxumaq və solution-da layihə istinadları qurmaq
  • NuGet paketini əlavə etmək və onun harada saxlandığını izah etmək

C# kursunda hər proqram bir app.cs faylı idi və .NET 10-un imkanı sayəsində dotnet run app.cs ilə işə düşürdü. Real tətbiq isə bir neçə layihədən ibarət olur: biznes məntiqi olan kitabxana, onu istifadə edən konsol və ya veb-tətbiq və testlər. Onları yaratmaq, birləşdirmək, yığmaq və xarici paketlər qoşmaq üçün .NET CLI, yəni dotnet əmri var. O, Windows, macOS və Linux-da eyni cür işləyir.

.NET CLI-nin əsas əmrləri

ƏmrNə edir
dotnet new listmövcud şablonları göstərir
dotnet new console -n HelloHello adlı konsol layihəsi yaradır
dotnet buildlayihəni kompilyasiya edir (bin/ və obj/ qovluqlarına)
dotnet runyığır və dərhal işə salır
dotnet testtest layihələrini işə salır
dotnet add package XNuGet paketi əlavə edir
dotnet publish -c Releaseserverə və ya istifadəçilərə vermək üçün hazır versiya yığır
dotnet --infoquraşdırılmış SDK-ları və runtime-ları göstərir
Terminal
dotnet new console -n Hello
cd Hello
dotnet run
Gözlənilən nəticə
The template "Console App" was created successfully.
...
Restore succeeded.
Hello, World!
Həqiqi nəticə (qısaldılıb): şablon yaradıldı, paketlər bərpa olundu, proqram işlədi

Layihənin mərkəzi **.csproj faylıdır — MSBuild formatında XML. Müasir SDK üslublu** faylda yalnız vacib olanlar yazılır: TargetFramework (net10.0), ImplicitUsings (tez-tez lazım olan using-ləri avtomatik əlavə edir) və Nullable (null səhvləri barədə xəbərdarlıqlar). Qovluqdakı bütün .cs faylları avtomatik daxil edilir. Köhnə .NET Framework layihələrində isə hər fayl ayrıca yazılmalı idi:

.NET Framework (köhnə üslub)
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Core" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Program.cs" />
    <Compile Include="Student.cs" />
    <Compile Include="GradeCalculator.cs" />
    <!-- every new file had to be listed here -->
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
SDK üslubu (.NET 10)
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net10.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\Gradebook.Core\Gradebook.Core.csproj" />
    <PackageReference Include="Humanizer" Version="2.14.1" />
  </ItemGroup>

</Project>
Yeni faylda layihə istinadı və NuGet paketi də var — hər ikisi aşağıda izah olunur

Solution: bir neçə layihə birlikdə

Solution (həll) bir-biri ilə əlaqəli layihələri qruplaşdıran fayldır; .NET 10-da o, susmaya görə yeni, yığcam .slnx formatında yaradılır (köhnə .sln də işləyir). Tipik quruluş: Gradebook.Core — heç nədən asılı olmayan kitabxana, Gradebook.App — onu çağıran konsol proqramı, Gradebook.Tests — xUnit testləri. Layihə istinadı (ProjectReference) bir layihənin digərinin siniflərini görməsinə imkan verir.

  1. 1
    Solution və layihələri yarat

    dotnet new sln -n Gradebook, sonra classlib, console və xunit şablonları ilə üç layihə.

  2. 2
    Layihələri solution-a əlavə et

    dotnet sln add ... — indi IDE və dotnet build hər üç layihəni birlikdə görür.

  3. 3
    İstinadları qur

    dotnet add Gradebook.App reference Gradebook.Core və testlər üçün eyni əmr. İstinad bir istiqamətlidir: Core App-i görmür.

  4. 4
    Yığ, işə sal, test et

    Solution qovluğunda dotnet build hamısını yığır, dotnet run --project Gradebook.App konsolu işə salır, dotnet test isə testləri.

Terminal
dotnet new sln -n Gradebook
dotnet new classlib -n Gradebook.Core
dotnet new console -n Gradebook.App
dotnet new xunit -n Gradebook.Tests
dotnet sln add Gradebook.Core Gradebook.App Gradebook.Tests
dotnet add Gradebook.App reference Gradebook.Core
dotnet add Gradebook.Tests reference Gradebook.Core
Bütün addımlar əmrlərlə — nəticədə Gradebook.slnx və üç layihə qovluğu yaranır
C#
namespace Gradebook.Core;

public static class GradeCalculator
{
    public static double Average(IEnumerable<int> scores)
    {
        var list = scores.ToList();
        if (list.Count == 0) throw new ArgumentException("No scores");
        return list.Average();
    }

    public static string Letter(int score) => score switch
    {
        < 0 or > 100 => throw new ArgumentOutOfRangeException(nameof(score)),
        >= 90 => "A",
        >= 80 => "B",
        >= 70 => "C",
        >= 50 => "D",
        _ => "F"
    };
}
Gradebook.Core/GradeCalculator.cs — kitabxanadakı sinif (public olmalıdır ki, başqa layihə onu görsün)
C#
using System.Globalization;
using Gradebook.Core;

CultureInfo.CurrentCulture = CultureInfo.InvariantCulture;

int[] scores = [92, 78, 85];
double average = GradeCalculator.Average(scores);
Console.WriteLine($"Average: {average:F1}");
Console.WriteLine($"Letter: {GradeCalculator.Letter((int)average)}");
Gözlənilən nəticə
Average: 85.0
Letter: B
Gradebook.App/Program.cs, dotnet run --project Gradebook.App ilə işə salınıb

NuGet paketləri

NuGet — .NET-in paket meneceri, nuget.org isə yüz minlərlə hazır kitabxananın anbarıdır (Java-dakı Maven Central kimi). dotnet add package Humanizer ən son versiyanı .csproj-a PackageReference kimi yazır; .NET 10-da eyni işi yeni üslubda dotnet package add Humanizer də görür. dotnet build və ya dotnet restore paketləri yükləyib istifadəçi qovluğundakı ortaq keşdə (~/.nuget/packages) saxlayır, dotnet list package --outdated isə köhnəlmiş paketləri göstərir.

C#
using Humanizer;

Console.WriteLine("score".ToQuantity(1));
Console.WriteLine("score".ToQuantity(3));
Console.WriteLine("student".ToQuantity(12));
Gözlənilən nəticə
1 score
3 scores
12 students
Nümunə nəticə: Humanizer paketi sözləri ingilis dilinin qaydaları ilə cəm halına salır (paketsiz işləmir)

Hazır proqramı paylaşmaq üçün dotnet publish işlət: .NET 8-dən bəri o, susmaya görə kodu optimallaşdıran Release konfiqurasiyasında yığır (dotnet build isə sazlama üçün Debug rejimindədir). -r win-x64 --self-contained əlavə etsən, nəticə .NET quraşdırılmamış kompüterdə də işləyən müstəqil qovluq olacaq. Komandada hamının eyni SDK versiyası ilə işləməsi üçün repozitorinin kökünə global.json faylı qoyulur — onu dotnet new globaljson yaradır.

Əsas fikirlər

  • dotnet new, build, run, test, publish — layihənin bütün həyatı üçün bir CLI.
  • SDK üslublu .csproj: TargetFramework, ImplicitUsings, Nullable; .cs faylları layihəyə avtomatik əlavə edilir.
  • Solution (.slnx) layihələri qruplaşdırır, ProjectReference isə onları bir istiqamətdə bağlayır.
  • NuGet: dotnet add package → PackageReference; paketlər ~/.nuget/packages keşində saxlanılır.
  • Bir neçə layihə olanda dotnet run --project ... yaz; bin/ və obj/ Git-ə getmir.

Özünü yoxla

10 sual. Hər düzgün cavab XP qazandırır.

1 / 10
Sinif kitabxanası hansı əmrlə yaradılır?