Frameworks CLI pour C# (.NET) : System.CommandLine et Cocona

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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.1


Exemple : 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 : 28


Fonctionnalité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 --help gé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                    

Recommendations