CLI-Frameworks für C# (.NET): System.CommandLine und Cocona
Die Erstellung von Konsolenanwendungen (CLI) in C# war lange Zeit mit manuellem Parsen von Befehlszeilenargumenten über string[] args und umständlichen Bedingungskonstrukten verbunden. Mit der Weiterentwicklung des .NET-Ökosystems sind jedoch spezialisierte Frameworks entstanden, die die Routinearbeit übernehmen: Argumentparsen, Hilfegenerierung, Validierung und sogar Dependency Injection (DI). In diesem Artikel betrachten wir zwei der gängigsten Ansätze: das offizielle System.CommandLine von Microsoft und das leichte, aber leistungsstarke Cocona.
Beide Werkzeuge ermöglichen es, sauberen, deklarativen Code zu schreiben, der leicht zu warten und zu testen ist. Sie erfahren, wie Sie diese schnell in Ihr Projekt einbinden, Befehle und Argumente definieren und sehen reale Codebeispiele.
1. System.CommandLine
System.CommandLine ist die offizielle Bibliothek von Microsoft, die Teil des .NET SDK (ab .NET 6) ist. Sie bietet einen vollständigen Funktionsumfang für den Aufbau komplexer CLI-Anwendungen: verschachtelte Befehle, Tab-Autovervollständigung, Validierung, asynchrone Handler und Hilfegenerierung.
Installation
Fügen Sie das Paket über NuGet hinzu:
dotnet add package System.CommandLine --version 2.0.0-beta4.22272.1Beispiel: Taschenrechner mit zwei Operationen
Erstellen wir eine einfache Anwendung, die den Befehl add oder multiply mit zwei Zahlen akzeptiert:
using System.CommandLine;
// Definieren des Stammbefehlsvar rootCommand = new RootCommand("Einfacher Taschenrechner");
// Erstellen des Unterbefehls "add"var addCommand = new Command("add", "Addition zweier Zahlen");var addXOption = new Option<int>("--x", "Erste Zahl") { IsRequired = true };var addYOption = new Option<int>("--y", "Zweite Zahl") { IsRequired = true };addCommand.AddOption(addXOption);addCommand.AddOption(addYOption);
addCommand.SetHandler((x, y) =>{ Console.WriteLine($"Ergebnis der Addition: {x + y}");}, addXOption, addYOption);
// Erstellen des Unterbefehls "multiply"var multiplyCommand = new Command("multiply", "Multiplikation zweier Zahlen");var multXOption = new Option<int>("--x", "Erste Zahl") { IsRequired = true };var multYOption = new Option<int>("--y", "Zweite Zahl") { IsRequired = true };multiplyCommand.AddOption(multXOption);multiplyCommand.AddOption(multYOption);
multiplyCommand.SetHandler((x, y) =>{ Console.WriteLine($"Ergebnis der Multiplikation: {x * y}");}, multXOption, multYOption);
// Hinzufügen der Befehle zum StammrootCommand.AddCommand(addCommand);rootCommand.AddCommand(multiplyCommand);
// Ausführenawait rootCommand.InvokeAsync(args);Starten der Anwendung:
dotnet run -- add --x 5 --y 3# Ausgabe: Ergebnis der Addition: 8
dotnet run -- multiply --x 4 --y 7# Ausgabe: Ergebnis der Multiplikation: 28Wichtige Funktionen von System.CommandLine
- Autovervollständigung — integrierte Unterstützung für Tab-Vervollständigung in bash und PowerShell.
- Hilfegenerierung — das Flag
--helperstellt automatisch eine Beschreibung aller Befehle und Optionen. - Validierung — Pflichtparameter, Wertebereiche und benutzerdefinierte Prüfungen können festgelegt werden.
- Asynchronität — Handler unterstützen
async Task. - Testen — Unit-Tests können einfach mit
TestConsolegeschrieben werden.
2. Cocona
Cocona ist ein alternatives Framework, das dank Attributen und automatischer Parameterbindung eine prägnantere Syntax bietet. Es eignet sich ideal für kleine und mittlere Projekte, bei denen die Entwicklungsgeschwindigkeit wichtig ist. Cocona unterstützt DI, Middleware und verschachtelte Befehle.
Installation
dotnet add package Co Auch in der Bibliothek
Aufgabenwarteschlangen für Rust: Überblick über beliebte Bibliotheken und Tools
Warp für Rust: Komplettes Tutorial mit Beispielen
Datenvalidierung in C# (.NET): Bibliotheken und Ansätze