CLI-Dienstprogramme in C#: Von der Idee zum fertigen Werkzeug an einem Abend

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

Warum C# ideal für CLI-Tools ist und warum das für Python-Entwickler wichtig ist

\n

Wenn wir über die Erstellung von Konsolen-Dienstprogrammen sprechen, kommen einem als Erstes Python, Bash oder Go in den Sinn. Aber was, wenn ich Ihnen sage, dass C# eine der am meisten unterschätzten Sprachen zum Schreiben schneller, plattformübergreifender und schöner CLI-Tools ist? Ja, genau das C#, das viele mit Webformularen und Unternehmensmonstern assoziieren.

\n

Mit der Veröffentlichung von .NET 6/8 hat C# eine minimale API, native Kompilierung (AOT) und die unglaublich praktische Bibliothek System.CommandLine erhalten. Jetzt kann man buchstäblich in 15 Minuten ein Dienstprogramm erstellen, das unter Windows, Linux und macOS läuft. Für Studenten und Entwickler, die Python lernen, ist dies eine hervorragende Möglichkeit, das Toolkit zu erweitern und zu verstehen, wie CLI-Dienstprogramme in anderen Sprachen funktionieren.

\n

In diesem Artikel schreiben wir nicht einfach "Hello World". Wir werden ein vollwertiges Dienstprogramm für die Arbeit mit Dateien erstellen, das Argumente parsen, farbigen Text ausgeben, Fehler behandeln und sogar eine Fortschrittsanzeige anzeigen kann. Los geht's!

\n\n

Projekteinrichtung: Minimale Handgriffe

\n

Das Erste, was Sie tun müssen, ist sicherzustellen, dass das .NET SDK (Version 6.0 oder höher) installiert ist. Die Überprüfung ist einfach:

\n
dotnet --version
\n

Wenn alles in Ordnung ist, erstellen wir ein neues Konsolenprojekt:

\n
dotnet new console -n FileGuardian\ncd FileGuardian
\n

Bereits in diesem Schritt erhalten wir ein fertiges Grundgerüst. Aber für ein echtes CLI-Dienstprogramm benötigen wir eine Bibliothek zum Parsen von Argumenten. Fügen wir sie hinzu:

\n
dotnet add package System.CommandLine --version 2.0.0-beta4.22272.1
\n

Fertig. Jetzt haben wir alles, um eine professionelle Konsolenanwendung in C# zu erstellen.

\n\n

Warum System.CommandLine und nicht manuelles Parsen?

\n

Viele Anfänger schreiben args[0], args[1] und fangen sich einen IndexOutOfRangeException ein. Das ist der Weg des Schmerzes. System.CommandLine bietet:

\n
    \n
  • Automatisches Parsen von Flags (--output, -o)
  • \n
  • Hinweise bei fehlerhafter Eingabe
  • \n
  • Integrierte Generierung von --help
  • \n
  • Unterstützung für Unterbefehle (wie in git)
  • \n
\n

Dies ist ein Must-have für jedes ernsthafte Konsolen-Dienstprogramm in C#.

\n\n

Den Kern des Dienstprogramms schreiben: Der erste Befehl

\n

Stellen Sie sich vor, wir erstellen ein Tool zur Dateiüberwachung – FileGuardian. Es wird die Dateigröße überprüfen und warnen, wenn diese das Limit überschreitet. Klingt nützlich, oder?

\n

Öffnen wir Program.cs und schreiben Folgendes:

\n
using System.CommandLine;\n\nvar rootCommand = new RootCommand("FileGuardian — Dienstprogramm zur Dateiüberwachung");\n\nvar fileOption = new Option<FileInfo?>(\n    name: "--file",\n    description: "Pfad zur zu analysierenden Datei"\n);\nrootCommand.AddOption(fileOption);\n\nrootCommand.SetHandler((file) =>\n{\n    if (file is null || !file.Exists)\n    {\n        Console.Error.WriteLine("❌ Datei nicht gefunden!");\n        return;\n    }\n    \n    long sizeInBytes = file.Length;\n    double sizeInMb = sizeInBytes / (1024.0 * 1024.0);\n    \n    Console.WriteLine($"📄 Datei: {file.Name}");\n    Console.WriteLine($"📏 Größe: {sizeInMb:F2} MB");\n    \n    if (sizeInMb > 100)\n        Console.WriteLine("⚠️ Achtung: Die Datei überschreitet 100 MB!");\n}, fileOption);\n\nawait rootCommand.InvokeAsync(args);
\n

Starten wir es:

\n
dotnet run -- --file somefile.txt
\n

Es funktioniert bereits. Aber das ist erst der Anfang. Fügen wir das gewisse Etwas hinzu – farbige Ausgabe und eine Fortschrittsanzeige.

\n\n

Schöne Ausgabe: Farben und Emojis hinzufügen

\n

Die Konsole muss nicht schwarz-weiß sein. C# ermöglicht es, die Textfarben einfach zu ändern. Erstellen wir eine Hilfsklasse:

\n
public static class ConsoleHelper\n{\n    public static void WriteSuccess(string message)\n    {\n        Console.ForegroundColor = ConsoleColor.Green;\n        Console.WriteLine($"✅ {message}"                

Blogs

Buchempfehlungen