Warum C# ideal für CLI-Tools ist und warum das für Python-Entwickler wichtig ist
\nWenn 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.
\nMit 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.
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\nProjekteinrichtung: Minimale Handgriffe
\nDas 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:
\ndotnet --version\nWenn alles in Ordnung ist, erstellen wir ein neues Konsolenprojekt:
\ndotnet new console -n FileGuardian\ncd FileGuardian\nBereits 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:
\ndotnet add package System.CommandLine --version 2.0.0-beta4.22272.1\nFertig. Jetzt haben wir alles, um eine professionelle Konsolenanwendung in C# zu erstellen.
\n\nWarum System.CommandLine und nicht manuelles Parsen?
\nViele Anfänger schreiben args[0], args[1] und fangen sich einen IndexOutOfRangeException ein. Das ist der Weg des Schmerzes. System.CommandLine bietet:
- \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
Dies ist ein Must-have für jedes ernsthafte Konsolen-Dienstprogramm in C#.
\n\nDen Kern des Dienstprogramms schreiben: Der erste Befehl
\nStellen 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:
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);\nStarten wir es:
\ndotnet run -- --file somefile.txt\nEs funktioniert bereits. Aber das ist erst der Anfang. Fügen wir das gewisse Etwas hinzu – farbige Ausgabe und eine Fortschrittsanzeige.
\n\nSchöne Ausgabe: Farben und Emojis hinzufügen
\nDie Konsole muss nicht schwarz-weiß sein. C# ermöglicht es, die Textfarben einfach zu ändern. Erstellen wir eine Hilfsklasse:
\npublic static class ConsoleHelper\n{\n public static void WriteSuccess(string message)\n {\n Console.ForegroundColor = ConsoleColor.Green;\n Console.WriteLine($"✅ {message}"