Aller au contenu principal

NuGet et dépendances

Notions théoriques

Qu'est-ce que NuGet ?

NuGet est le gestionnaire de paquets officiel de .NET. Il permet d'ajouter des bibliothèques tierces à votre projet. C'est l'équivalent de Maven (Java) ou de Composer (PHP).

  • Le dépôt central est nuget.org
  • Les dépendances sont déclarées dans le fichier .csproj
  • La commande dotnet add package télécharge et référence un paquet

Ajouter un paquet NuGet

Sur Windows (PowerShell) et Linux (Bash) — même commande :

# Ajouter un paquet
dotnet add package Newtonsoft.Json

# Ajouter une version spécifique
dotnet add package Serilog --version 3.1.1

# Lister les paquets installés
dotnet list package

# Restaurer les paquets (après un git clone)
dotnet restore

Le fichier .csproj avec dépendances

Après dotnet add package, le .csproj est automatiquement mis à jour :

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Serilog" Version="3.1.1" />
</ItemGroup>
</Project>

.gitignore pour .NET

Ne jamais committer le dossier bin/ et obj/

Ces dossiers contiennent les fichiers compilés et peuvent être très volumineux. Créez toujours un .gitignore adapté :

dotnet new gitignore

Cela crée un .gitignore qui exclut automatiquement bin/, obj/, les fichiers de secrets, etc.

Sérialisation JSON avec Newtonsoft.Json

using Newtonsoft.Json;

// Objet → JSON (sérialisation)
var eleve = new { Nom = "Alice", Age = 20, Note = 15.5 };
string json = JsonConvert.SerializeObject(eleve, Formatting.Indented);
Console.WriteLine(json);

// JSON → Objet (désérialisation)
string jsonTexte = "{\"Nom\":\"Bob\",\"Age\":21,\"Note\":14.0}";
var obj = JsonConvert.DeserializeObject<dynamic>(jsonTexte);
Console.WriteLine(obj?.Nom);

System.Text.Json — alternative intégrée à .NET

.NET inclut aussi System.Text.Json sans dépendance externe :

using System.Text.Json;

var eleve = new { Nom = "Alice", Age = 20 };
string json = JsonSerializer.Serialize(eleve, new JsonSerializerOptions { WriteIndented = true });
Console.WriteLine(json);

Exemple pratique

using Newtonsoft.Json;

// Classe pour la sérialisation
class Etudiant
{
public string Nom { get; set; } = "";
public int Age { get; set; }
public double Note { get; set; }
public string Filiere { get; set; } = "";
}

// Liste d'étudiants
var etudiants = new List<Etudiant>
{
new Etudiant { Nom = "Alice", Age = 20, Note = 15.5, Filiere = "SLAM" },
new Etudiant { Nom = "Bob", Age = 21, Note = 12.0, Filiere = "SISR" },
new Etudiant { Nom = "Charlie", Age = 19, Note = 17.5, Filiere = "SLAM" },
};

// Sérialisation en JSON
string json = JsonConvert.SerializeObject(etudiants, Formatting.Indented);
Console.WriteLine("=== JSON généré ===");
Console.WriteLine(json);

// Sauvegarde dans un fichier
string fichier = "etudiants.json";
File.WriteAllText(fichier, json);
Console.WriteLine($"\nSauvegardé dans : {fichier}");

// Rechargement depuis le fichier
string jsonLu = File.ReadAllText(fichier);
var etudiantsCharges = JsonConvert.DeserializeObject<List<Etudiant>>(jsonLu);

Console.WriteLine("\n=== Rechargés depuis JSON ===");
foreach (var e in etudiantsCharges ?? [])
Console.WriteLine($" {e.Nom,-10} {e.Note:F1}/20 ({e.Filiere})");

Test de mémorisation/compréhension


Quelle commande ajoute le paquet 'Newtonsoft.Json' à un projet C# ?


Où sont déclarées les dépendances NuGet d'un projet C# ?


Quelle commande doit-on exécuter après un `git clone` pour récupérer les dépendances ?


Quel est l'équivalent de NuGet pour Java ?


Quelle commande génère un `.gitignore` adapté aux projets .NET ?


TP pour réfléchir et résoudre des problèmes

Vous allez sérialiser une liste d'étudiants en JSON et la recharger.

Étape 1 — Installer Newtonsoft.Json

Ajoutez le paquet au projet.


Bonne pratique - dotnet restore après clone

Quand vous clonez un dépôt git contenant un projet C#, les dossiers bin/ et obj/ sont absents (listés dans .gitignore). Exécutez dotnet restore pour télécharger les paquets NuGet listés dans le .csproj avant de lancer dotnet run.

Étape 2 — Sérialiser en JSON

Convertissez une liste d'étudiants en JSON et sauvegardez-la.


Bonne pratique - Formatting.Indented pour la lisibilité

En développement, utilisez Formatting.Indented pour produire un JSON lisible par un humain. En production (API, fichiers de grande taille), préférez Formatting.None pour réduire la taille du fichier.

Étape 3 — Recharger depuis le fichier JSON

Relisez le fichier JSON et désérialisez-le.


Bonne pratique - ?? [] pour les résultats nullable

DeserializeObject<T> peut retourner null si le JSON est invalide. L'opérateur ?? [] (null-coalescing avec collection expression) fournit une liste vide comme valeur de repli, évitant une NullReferenceException dans le foreach.

📌 Une solution