Utilitaires CLI en C# : de l'idée à l'outil prêt en une soirée

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Pourquoi C# est idéal pour les outils CLI, et pourquoi c'est important pour un développeur Python

\n

Quand on parle de création d'utilitaires console, on pense d'abord à Python, Bash ou Go. Mais que diriez-vous si je vous disais que C# est l'un des langages les plus sous-estimés pour écrire des outils CLI rapides, multiplateformes et élégants ? Oui, ce même C# que beaucoup associent aux formulaires web et aux monstres d'entreprise.

\n

Avec la sortie de .NET 6/8, C# s'est doté d'une API minimale, d'une compilation native (AOT) et d'une bibliothèque incroyablement pratique System.CommandLine. Désormais, créer un utilitaire qui fonctionne sur Windows, Linux et macOS est possible en seulement 15 minutes. Pour les étudiants et développeurs apprenant Python, c'est un excellent moyen d'élargir leur boîte à outils et de comprendre comment fonctionnent les utilitaires CLI dans d'autres langages.

\n

Dans cet article, nous n'allons pas simplement écrire "Hello World". Nous allons créer un utilitaire complet pour travailler avec des fichiers, capable d'analyser des arguments, d'afficher du texte en couleur, de gérer les erreurs et même d'afficher une barre de progression. C'est parti !

\n\n

Configuration du projet : un minimum d'efforts

\n

La première chose à faire est de vous assurer que vous avez installé le SDK .NET (version 6.0 ou supérieure). Vérifiez simplement :

\n
dotnet --version
\n

Si tout va bien, créez un nouveau projet console :

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

Déjà à ce stade, nous obtenons un squelette prêt. Mais pour un véritable utilitaire CLI, nous aurons besoin d'une bibliothèque pour l'analyse des arguments. Ajoutons-la :

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

Prêt. Nous avons maintenant tout ce qu'il faut pour créer une application console professionnelle en C#.

\n\n

Pourquoi System.CommandLine plutôt que l'analyse manuelle ?

\n

Beaucoup de débutants écrivent args[0], args[1] et attrapent une IndexOutOfRangeException. C'est la voie de la douleur. System.CommandLine offre :

\n
    \n
  • Analyse automatique des drapeaux (--output, -o)
  • \n
  • Suggestions en cas de saisie incorrecte
  • \n
  • Génération intégrée de --help
  • \n
  • Prise en charge des sous-commandes (comme dans git)
  • \n
\n

C'est un must-have pour tout utilitaire console C# sérieux.

\n\n

Écrire le cœur de l'utilitaire : première commande

\n

Imaginez que nous créons un outil de surveillance de fichiers — FileGuardian. Il vérifiera la taille des fichiers et avertira s'ils dépassent une limite. Ça semble utile, non ?

\n

Ouvrons Program.cs et écrivons ce qui suit :

\n
using System.CommandLine;\n\nvar rootCommand = new RootCommand("FileGuardian — utilitaire de surveillance de fichiers");\n\nvar fileOption = new Option<FileInfo?>(\n    name: "--file",\n    description: "Chemin vers le fichier à analyser"\n);\nrootCommand.AddOption(fileOption);\n\nrootCommand.SetHandler((file) =>\n{\n    if (file is null || !file.Exists)\n    {\n        Console.Error.WriteLine("❌ Fichier introuvable !");\n        return;\n    }\n    \n    long sizeInBytes = file.Length;\n    double sizeInMb = sizeInBytes / (1024.0 * 1024.0);\n    \n    Console.WriteLine($"📄 Fichier : {file.Name}");\n    Console.WriteLine($"📏 Taille : {sizeInMb:F2} Mo");\n    \n    if (sizeInMb > 100)\n        Console.WriteLine("⚠️ Attention : le fichier dépasse 100 Mo !");\n}, fileOption);\n\nawait rootCommand.InvokeAsync(args);
\n

Exécutons :

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

Ça fonctionne déjà. Mais ce n'est que le début. Ajoutons une touche spéciale — l'affichage en couleur et une barre de progression.

\n\n

Bel affichage : ajout de couleurs et d'émojis

\n

La console n'a pas à être en noir et blanc. C# permet de changer facilement les couleurs du texte. Créons une classe utilitaire :

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

Blogs

Book Recommendations