Framework CLI pour C# (.NET) : System.CommandLine et Spectre.Console

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

Framework CLI pour C# (.NET) : System.CommandLine et Spectre.Console



Créer des applications console (CLI) de qualité en C# est une tâche qui nécessite non seulement le traitement des arguments de ligne de commande, mais aussi une présentation pratique des données, la prise en charge des sous-commandes, la validation et l'interactivité. Dans l'écosystème .NET, il existe deux outils puissants pour cela : le framework officiel System.CommandLine de Microsoft et la bibliothèque polyvalente Spectre.Console. Dans cet article, nous examinerons en détail leurs fonctionnalités, montrerons des exemples d'utilisation et comparerons les approches.



1. System.CommandLine : l'analyseur officiel de Microsoft



System.CommandLine est une bibliothèque open source qui fournit une manière déclarative de définir des commandes, des arguments, des options et des gestionnaires. Elle fait partie du SDK .NET (depuis .NET 6) et est disponible en tant que package NuGet.



Fonctionnalités principales

  • Description déclarative de la structure des commandes à l'aide d'attributs ou de l'API fluent.
  • Génération automatique de l'aide (--help).
  • Prise en charge des commandes imbriquées (sous-commandes) et des alias.
  • Validation des arguments et des options (types, plages, obligatoires).
  • Intégration avec les conteneurs DI et les middleware.


Exemple : une application simple avec deux commandes

Créons une application console qui prend en charge les commandes greet et calc.



using System.CommandLine;

var rootCommand = new RootCommand("Application CLI multifonctionnelle");

// Commande greetvar greetCommand = new Command("greet", "Saluer l'utilisateur");var nameOption = new Option<string>( "--name", () => "monde", "Nom pour la salutation");greetCommand.AddOption(nameOption);

greetCommand.SetHandler((string name) =>{ Console.WriteLine($"Bonjour, {name}!");}, nameOption);

// Commande calcvar calcCommand = new Command("calc", "Calculatrice simple");var aArgument = new Argument<int>("a", "Premier nombre");var bArgument = new Argument<int>("b", "Deuxième nombre");var operationOption = new Option<string>( "--operation", () => "add", "Opération : add, sub, mul, div");calcCommand.AddArgument(aArgument);calcCommand.AddArgument(bArgument);calcCommand.AddOption(operationOption);

calcCommand.SetHandler((int a, int b, string op) =>{ var result = op switch { "add" => a + b, "sub" => a - b, "mul" => a * b, "div" => b != 0 ? a / b : throw new DivideByZeroException(), _ => throw new ArgumentException("Opération inconnue") }; Console.WriteLine($"Résultat : {result}");}, aArgument, bArgument, operationOption);

rootCommand.AddCommand(greetCommand);rootCommand.AddCommand(calcCommand);

return await rootCommand.InvokeAsync(args);


Lancement de l'application :

dotnet run -- greet --name "PythonLib"dotnet run -- calc 10 5 --operation mul


2. Spectre.Console : beauté et interactivité



Spectre.Console est une bibliothèque pour créer de magnifiques interfaces console. Elle ne remplace pas l'analyseur d'arguments, mais le complète parfaitement : sortie colorée, tableaux, barres de progression, menus interactifs et même dessin dans la console.



Fonctionnalités principales

  • Sortie colorée et formatée avec prise en charge de Markdown.
  • Tableaux, diagrammes, calendriers.
  • Composants interactifs : sélection dans une liste, saisie de texte, confirmation.
  • Animation (spinners, barres de progression).
  • Dessin de cadres, panneaux et colonnes.


Exemple : menu interactif et tableau

Montrons comment créer un menu de sélection et afficher des données sous forme de tableau.



using Spectre.Console;

// Menu interactifvar choice = AnsiConsole.Prompt( new SelectionProm

Recommendations