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 mul2. 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 Aussi dans la bibliothèque
Bibliothèques WebSocket Kotlin pour la création d'applications temps réel dans les applications web
Chai pour JavaScript (Node.js) : guide complet avec exemples
Criterion pour Rust : guide complet avec exemples
Géolocalisation et cartes en Java : bibliothèques, API et exemples de code
AutoMapper pour C# (.NET) : guide complet avec exemples