أطر CLI لـ C# (.NET): System.CommandLine و Cocona

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

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

ابدأ الدورة

أطر CLI لـ C# (.NET): System.CommandLine و Cocona



لفترة طويلة، كان إنشاء تطبيقات وحدة التحكم (CLI) بلغة C# مرتبطًا بتحليل وسائط سطر الأوامر يدويًا عبر string[] args وهياكل شرطية مرهقة. ومع ذلك، مع تطور نظام .NET البيئي، ظهرت أطر متخصصة تتولى المهام الروتينية: تحليل الوسائط، وإنشاء التعليمات، والتحقق من الصحة، وحتى حقن التبعية (DI). في هذه المقالة، سننظر في النهجين الأكثر شيوعًا: الإطار الرسمي System.CommandLine من Microsoft والإطار الخفيف والقوي Cocona.



تتيح كلتا الأداتين كتابة كود نظيف وتصريحي يسهل صيانته واختباره. ستتعلم كيفية ربطهما بمشروعك بسرعة، وتحديد الأوامر والوسائط، وسترى أمثلة حقيقية على الكود.



1. System.CommandLine



System.CommandLine هي مكتبة رسمية من Microsoft، وهي جزء من .NET SDK (بدءًا من .NET 6). توفر مجموعة كاملة من الوظائف لبناء تطبيقات CLI معقدة: أوامر متداخلة، وإكمال تلقائي باستخدام مفتاح Tab، والتحقق من الصحة، ومعالجات غير متزامنة، وإنشاء التعليمات.



التثبيت

أضف الحزمة عبر NuGet:

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


مثال: آلة حاسبة بعمليتين

لنقم بإنشاء تطبيق بسيط يقبل الأمر add أو multiply مع رقمين:

using System.CommandLine;

// تعريف الأمر الجذريvar rootCommand = new RootCommand("آلة حاسبة بسيطة");

// إنشاء أمر فرعي "add"var addCommand = new Command("add", "جمع رقمين");var addXOption = new Option<int>("--x", "الرقم الأول") { IsRequired = true };var addYOption = new Option<int>("--y", "الرقم الثاني") { IsRequired = true };addCommand.AddOption(addXOption);addCommand.AddOption(addYOption);

addCommand.SetHandler((x, y) =>{ Console.WriteLine($"نتيجة الجمع: {x + y}");}, addXOption, addYOption);

// إنشاء أمر فرعي "multiply"var multiplyCommand = new Command("multiply", "ضرب رقمين");var multXOption = new Option<int>("--x", "الرقم الأول") { IsRequired = true };var multYOption = new Option<int>("--y", "الرقم الثاني") { IsRequired = true };multiplyCommand.AddOption(multXOption);multiplyCommand.AddOption(multYOption);

multiplyCommand.SetHandler((x, y) =>{ Console.WriteLine($"نتيجة الضرب: {x * y}");}, multXOption, multYOption);

// إضافة الأوامر إلى الجذرrootCommand.AddCommand(addCommand);rootCommand.AddCommand(multiplyCommand);

// التشغيلawait rootCommand.InvokeAsync(args);


تشغيل التطبيق:

dotnet run -- add --x 5 --y 3# الإخراج: نتيجة الجمع: 8

dotnet run -- multiply --x 4 --y 7# الإخراج: نتيجة الضرب: 28


الميزات الرئيسية لـ System.CommandLine

  • الإكمال التلقائي — دعم مدمج لإكمال Tab في bash و PowerShell.
  • إنشاء التعليمات — العلم --help يقوم تلقائيًا بإنشاء وصف لجميع الأوامر والخيارات.
  • التحقق من الصحة — يمكن تعيين معلمات إلزامية، ونطاقات قيم، وعمليات تحقق مخصصة.
  • عدم التزامن — المعالجات تدعم async Task.
  • الاختبار — سهولة كتابة اختبارات الوحدة باستخدام TestConsole.


2. Cocona



Cocona هو إطار بديل يقدم بناء جملة أكثر إيجازًا بفضل السمات والربط التلقائي للمعلمات. إنه مثالي للمشاريع الصغيرة والمتوسطة حيث تكون سرعة التطوير مهمة. يدعم Cocona حقن التبعية (DI)، والبرمجيات الوسيطة (middleware)، والأوامر المتداخلة.



التثبيت

dotnet add package Co                    

توصيات