أدوات CLI بلغة C#: من الفكرة إلى الأداة الجاهزة في أمسية

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

لماذا تعتبر C# مثالية لأدوات CLI، ولماذا هذا مهم لمطور Python

\n

عندما نتحدث عن إنشاء أدوات وحدة التحكم، يتبادر إلى الذهن أولاً Python أو Bash أو Go. ولكن ماذا لو أخبرتك أن C# هي واحدة من أكثر اللغات التي لا تحظى بالتقدير الكافي لكتابة أدوات CLI سريعة ومتعددة المنصات وجميلة؟ نعم، نفس لغة C# التي يربطها الكثيرون بنماذج الويب والوحوش المؤسسية.

\n

مع إصدار .NET 6/8، أصبحت C# تحتوي على واجهة برمجة تطبيقات بسيطة (Minimal API)، وتجميع أصلي (AOT)، ومكتبة مريحة بشكل لا يصدق System.CommandLine. الآن، يمكن إنشاء أداة تعمل على Windows وLinux وmacOS في 15 دقيقة حرفياً. بالنسبة للطلاب والمطورين الذين يتعلمون Python، هذه طريقة رائعة لتوسيع مجموعة أدواتهم وفهم كيفية عمل أدوات CLI بلغات أخرى.

\n

في هذه المقالة، لن نكتب مجرد "Hello World". سننشئ أداة كاملة للعمل مع الملفات، قادرة على تحليل الوسائط، وعرض نص ملون، ومعالجة الأخطاء، وحتى إظهار شريط التقدم. هيا بنا!

\n\n

إعداد المشروع: أقل قدر من الحركة

\n

أول شيء يجب فعله هو التأكد من تثبيت .NET SDK (الإصدار 6.0 أو أعلى). التحقق بسيط:

\n
dotnet --version
\n

إذا كان كل شيء على ما يرام، نقوم بإنشاء مشروع وحدة تحكم جديد:

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

في هذه المرحلة، نحصل على هيكل عظمي جاهز. ولكن لأداة CLI حقيقية، سنحتاج إلى مكتبة لتحليل الوسائط. نضيفها:

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

تم. الآن لدينا كل ما يلزم لإنشاء تطبيق وحدة تحكم احترافي بلغة C#.

\n\n

لماذا System.CommandLine بدلاً من التحليل اليدوي؟

\n

يكتب العديد من المبتدئين args[0]، args[1] ويصطدمون بـ IndexOutOfRangeException. هذا طريق الألم. System.CommandLine تقدم:

\n
    \n
  • تحليل تلقائي للعلامات (--output، -o)
  • \n
  • تلميحات عند الإدخال غير الصحيح
  • \n
  • توليد مدمج لـ --help
  • دعم الأوامر الفرعية (كما في git)
\n

هذا أمر لا غنى عنه لأي أداة وحدة تحكم C# جادة.

\n\n

كتابة نواة الأداة: الأمر الأول

\n

تخيل أننا ننشئ أداة لمراقبة الملفات — FileGuardian. ستتحقق من حجم الملفات وتحذر إذا تجاوزت الحد المسموح. يبدو مفيداً، أليس كذلك؟

\n

لنفتح Program.cs ونكتب ما يلي:

\n
using System.CommandLine;\n\nvar rootCommand = new RootCommand("FileGuardian — أداة لمراقبة الملفات");\n\nvar fileOption = new Option<FileInfo?>(\n    name: "--file",\n    description: "المسار إلى الملف للتحليل"\n);\nrootCommand.AddOption(fileOption);\n\nrootCommand.SetHandler((file) =>\n{\n    if (file is null || !file.Exists)\n    {\n        Console.Error.WriteLine("❌ الملف غير موجود!");\n        return;\n    }\n    \n    long sizeInBytes = file.Length;\n    double sizeInMb = sizeInBytes / (1024.0 * 1024.0);\n    \n    Console.WriteLine($"📄 الملف: {file.Name}");\n    Console.WriteLine($"📏 الحجم: {sizeInMb:F2} MB");\n    \n    if (sizeInMb > 100)\n        Console.WriteLine("⚠️ تحذير: الملف يتجاوز 100 MB!");\n}, fileOption);\n\nawait rootCommand.InvokeAsync(args);
\n

نشغل:

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

يعمل بالفعل. لكن هذه مجرد البداية. دعنا نضيف لمسة خاصة — إخراج ملون وشريط تقدم.

\n\n

إخراج جميل: إضافة الألوان والرموز التعبيرية

\n

وحدة التحكم ليست مضطرة لأن تكون أبيض وأسود. تسمح C# بتغيير ألوان النص بسهولة. لننشئ فئة مساعدة:

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

المدونات

توصيات الكتب