dotnet new,build,run,testəmrlərindən istifadə etmək- SDK üslublu
.csprojfaylı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
| Əmr | Nə edir |
|---|---|
dotnet new list | mövcud şablonları göstərir |
dotnet new console -n Hello | Hello adlı konsol layihəsi yaradır |
dotnet build | layihəni kompilyasiya edir (bin/ və obj/ qovluqlarına) |
dotnet run | yığır və dərhal işə salır |
dotnet test | test layihələrini işə salır |
dotnet add package X | NuGet paketi əlavə edir |
dotnet publish -c Release | serverə və ya istifadəçilərə vermək üçün hazır versiya yığır |
dotnet --info | quraşdırılmış SDK-ları və runtime-ları göstərir |
dotnet new console -n Hello
cd Hello
dotnet runThe template "Console App" was created successfully. ... Restore succeeded. Hello, World!
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:
<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><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>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.
- 1Solution və layihələri yarat
dotnet new sln -n Gradebook, sonraclasslib,consolevəxunitşablonları ilə üç layihə. - 2Layihələri solution-a əlavə et
dotnet sln add ...— indi IDE vədotnet buildhər üç layihəni birlikdə görür. - 3İstinadları qur
dotnet add Gradebook.App reference Gradebook.Corevə testlər üçün eyni əmr. İstinad bir istiqamətlidir: Core App-i görmür. - 4Yığ, işə sal, test et
Solution qovluğunda
dotnet buildhamısını yığır,dotnet run --project Gradebook.Appkonsolu işə salır,dotnet testisə testləri.
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.CoreGradebook.slnx və üç layihə qovluğu yaranırnamespace 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)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)}");Average: 85.0 Letter: B
Gradebook.App/Program.cs, dotnet run --project Gradebook.App ilə işə salınıbNuGet 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.
using Humanizer;
Console.WriteLine("score".ToQuantity(1));
Console.WriteLine("score".ToQuantity(3));
Console.WriteLine("student".ToQuantity(12));1 score 3 scores 12 students
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;.csfaylları layihəyə avtomatik əlavə edilir. - Solution (
.slnx) layihələri qruplaşdırır,ProjectReferenceisə onları bir istiqamətdə bağlayır. - NuGet:
dotnet add package→PackageReference; paketlər~/.nuget/packageskeş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.