NuGet: pachete și PackageReference în C# (.NET)

Ecosistem .NET: DI, EF Core și teste .NET Core 1.0 (dotnet package add: SDK .NET 10)

NuGet este managerul de pachete .NET: adaugi biblioteci cu dotnet package add, iar proiectul le reține ca PackageReference în .csproj.

Sintaxă C#
dotnet package add <PACHET> [--version <VERSIUNE>]   dotnet package list --outdated   dotnet package remove <PACHET>

Ce face NuGet: pachete și PackageReference

Bibliotecile .NET se distribuie ca pachete NuGet, de obicei de pe nuget.org. Comanda dotnet package add Nume verifică dacă pachetul e compatibil cu proiectul, adaugă în fișierul .csproj un element <PackageReference> și descarcă pachetul (restore). Fără --version se ia ultima versiune stabilă; cu --prerelease sunt acceptate și versiunile de test.

Din SDK-ul .NET 10 comenzile au forma „substantiv, apoi verb”: dotnet package add, dotnet package list, dotnet package remove. Forma veche, dotnet add package, funcționează în continuare și este singura disponibilă pe SDK-urile .NET 9 și mai vechi. dotnet package list --outdated arată pachetele care au versiuni mai noi, iar --vulnerable pe cele cu vulnerabilități cunoscute.

În soluțiile cu multe proiecte, Central Package Management ține versiunile într-un singur fișier, Directory.Packages.props, iar proiectele scriu doar numele pachetului.

Parametri

Parametru Descriere
--version / -v Versiunea exactă a pachetului.
--prerelease Permite versiuni preview.
--project Proiectul în care se adaugă (implicit cel din dosarul curent).
--source / -s Altă sursă de pachete decât cele configurate.

Exemple

Exemplul 1: Adăugare, listare și ștergere

dotnet package add Humanizer --version 2.14.1
dotnet package list
dotnet package list --outdated
dotnet package remove Humanizer

Ce apare în Magazin.csproj după prima comandă

<ItemGroup>
  <PackageReference Include="Humanizer" Version="2.14.1" />
</ItemGroup>

Exemplul 2: Versiuni centralizate (Central Package Management)

Versiunea apare o singură dată, în Directory.Packages.props din rădăcina soluției; proiectele nu mai scriu Version.

<!-- Directory.Packages.props -->
<Project>
  <PropertyGroup>
    <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
  </PropertyGroup>
  <ItemGroup>
    <PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="10.0.0" />
    <PackageVersion Include="xunit" Version="2.9.3" />
  </ItemGroup>
</Project>

<!-- Magazin/Magazin.csproj -->
<ItemGroup>
  <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" />
</ItemGroup>

Greșeli frecvente

  • Copierea manuală a fișierelor DLL în proiect în loc de pachet NuGet: pierzi actualizările și dependențele tranzitive.
  • dotnet package add pe un SDK mai vechi decât .NET 10 dă eroare; folosește dotnet add package.
  • Versiuni diferite ale aceluiași pachet în proiectele unei soluții duc la avertismente și erori la rulare. Central Package Management rezolvă problema.

Comenzi înrudite