CLI-Framework für C# (.NET): System.CommandLine und Spectre.Console

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

CLI-Framework für C# (.NET): System.CommandLine und Spectre.Console



Die Erstellung hochwertiger Konsolenanwendungen (CLI) in C# ist eine Aufgabe, die nicht nur die Verarbeitung von Befehlszeilenargumenten, sondern auch eine benutzerfreundliche Darstellung von Daten, Unterstützung für Unterbefehle, Validierung und Interaktivität erfordert. Im .NET-Ökosystem gibt es dafür zwei leistungsstarke Werkzeuge: das offizielle System.CommandLine von Microsoft und die vielseitige Bibliothek Spectre.Console. In diesem Artikel werden wir ihre Funktionen im Detail analysieren, Anwendungsbeispiele zeigen und die Ansätze vergleichen.



1. System.CommandLine: Offizieller Parser von Microsoft



System.CommandLine ist eine Open-Source-Bibliothek, die eine deklarative Möglichkeit zur Definition von Befehlen, Argumenten, Optionen und Handlern bietet. Sie ist Teil des .NET SDK (ab .NET 6) und als NuGet-Paket verfügbar.



Hauptfunktionen

  • Deklarative Beschreibung der Befehlsstruktur mittels Attributen oder Fluent-API.
  • Automatische Generierung der Hilfe (--help).
  • Unterstützung für verschachtelte Befehle (Subcommands) und Aliase.
  • Validierung von Argumenten und Optionen (Typen, Bereiche, Pflichtfelder).
  • Integration mit DI-Containern und Middleware.


Beispiel: Einfache Anwendung mit zwei Befehlen

Wir erstellen eine Konsolenanwendung, die die Befehle greet und calc unterstützt.



using System.CommandLine;

var rootCommand = new RootCommand("Multifunktionale CLI-Anwendung");

// Befehl greetvar greetCommand = new Command("greet", "Benutzer begrüßen");var nameOption = new Option<string>( "--name", () => "Welt", "Name für die Begrüßung");greetCommand.AddOption(nameOption);

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

// Befehl calcvar calcCommand = new Command("calc", "Einfacher Taschenrechner");var aArgument = new Argument<int>("a", "Erste Zahl");var bArgument = new Argument<int>("b", "Zweite Zahl");var operationOption = new Option<string>( "--operation", () => "add", "Operation: 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("Unbekannte Operation") }; Console.WriteLine($"Ergebnis: {result}");}, aArgument, bArgument, operationOption);

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

return await rootCommand.InvokeAsync(args);


Starten der Anwendung:

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


2. Spectre.Console: Schönheit und Interaktivität



Spectre.Console ist eine Bibliothek zur Erstellung ansprechender Konsolenoberflächen. Sie ersetzt keinen Argument-Parser, ergänzt ihn aber hervorragend: farbige Ausgabe, Tabellen, Fortschrittsbalken, interaktive Menüs und sogar Zeichnungen in der Konsole.



Hauptfunktionen

  • Farbige und formatierte Ausgabe mit Markdown-Unterstützung.
  • Tabellen, Diagramme, Kalender.
  • Interaktive Komponenten: Auswahl aus einer Liste, Texteingabe, Bestätigung.
  • Animationen (Spinner, Fortschrittsbalken).
  • Zeichnen von Rahmen, Panels und Spalten.


Beispiel: Interaktives Menü und Tabelle

Wir zeigen, wie man ein Auswahlmenü erstellt und Daten in Tabellenform ausgibt.



using Spectre.Console;

// Interaktives Menüvar choice = AnsiConsole.Prompt( new SelectionProm

Empfehlungen