Frameworks CLI pour C# (.NET) : System.CommandLine et Cocona
La création d'applications console (CLI) en C# a longtemps été associée à l'analyse manuelle des arguments de ligne de commande via string[] args et à des constructions conditionnelles lourdes. Cependant, avec l'évolution de l'écosystème .NET, des frameworks spécialisés sont apparus pour prendre en charge les tâches répétitives : analyse des arguments, génération d'aide, validation et même injection de dépendances (DI). Dans cet article, nous examinerons les deux approches les plus populaires : le framework officiel System.CommandLine de Microsoft et le framework léger mais puissant Cocona.
Les deux outils permettent d'écrire un code propre et déclaratif, facile à maintenir et à tester. Vous apprendrez à les intégrer rapidement à un projet, à définir des commandes et des arguments, et vous verrez des exemples de code concrets.
1. System.CommandLine
System.CommandLine est la bibliothèque officielle de Microsoft, incluse dans le SDK .NET (à partir de .NET 6). Elle offre un ensemble complet de fonctionnalités pour créer des applications CLI complexes : commandes imbriquées, autocomplétion par Tab, validation, gestionnaires asynchrones et génération d'aide.
Installation
Ajoutez le package via NuGet :
dotnet add package System.CommandLine --version 2.0.0-beta4.22272.1Exemple : calculatrice avec deux opérations
Créons une application simple qui accepte la commande add ou multiply avec deux nombres :
using System.CommandLine;
// Définition de la commande racinevar rootCommand = new RootCommand("Calculatrice simple");
// Création de la sous-commande "add"var addCommand = new Command("add", "Addition de deux nombres");var addXOption = new Option<int>("--x", "Premier nombre") { IsRequired = true };var addYOption = new Option<int>("--y", "Deuxième nombre") { IsRequired = true };addCommand.AddOption(addXOption);addCommand.AddOption(addYOption);
addCommand.SetHandler((x, y) =>{ Console.WriteLine($"Résultat de l'addition : {x + y}");}, addXOption, addYOption);
// Création de la sous-commande "multiply"var multiplyCommand = new Command("multiply", "Multiplication de deux nombres");var multXOption = new Option<int>("--x", "Premier nombre") { IsRequired = true };var multYOption = new Option<int>("--y", "Deuxième nombre") { IsRequired = true };multiplyCommand.AddOption(multXOption);multiplyCommand.AddOption(multYOption);
multiplyCommand.SetHandler((x, y) =>{ Console.WriteLine($"Résultat de la multiplication : {x * y}");}, multXOption, multYOption);
// Ajout des commandes à la racinerootCommand.AddCommand(addCommand);rootCommand.AddCommand(multiplyCommand);
// Exécutionawait rootCommand.InvokeAsync(args);Lancement de l'application :
dotnet run -- add --x 5 --y 3# Sortie : Résultat de l'addition : 8
dotnet run -- multiply --x 4 --y 7# Sortie : Résultat de la multiplication : 28Fonctionnalités clés de System.CommandLine
- Autocomplétion — prise en charge intégrée de la complétion par Tab pour bash et PowerShell.
- Génération d'aide — le drapeau
--helpgénère automatiquement une description de toutes les commandes et options. - Validation — possibilité de définir des paramètres obligatoires, des plages de valeurs et des vérifications personnalisées.
- Asynchronisme — les gestionnaires prennent en charge
async Task. - Tests — facile d'écrire des tests unitaires avec
TestConsole.
2. Cocona
Cocona est un framework alternatif qui propose une syntaxe plus concise grâce aux attributs et à la liaison automatique des paramètres. Il est idéal pour les projets de petite et moyenne envergure où la rapidité de développement est importante. Cocona prend en charge DI, middleware et commandes imbriquées.
Installation
dotnet add package Co Aussi dans la bibliothèque
Internationalisation (i18n) en Java : guide complet avec exemples
Configuration d'applications en Rust : bibliothèques config et dotenv
Mongoose pour JavaScript (Node.js) : guide complet avec exemples
Abseil C++ : guide complet avec exemples pratiques