رضوى العربي

تُعدّ ‎.NET Core بيئة تطوير مُتَعدِّدة الأغراض، مُصانة بواسطة مايكروسوفت Microsoft ومجتمع الـ ‎.NET على GitHub. تتميز بكْونها مُتَعدِّدة المنصات (cross-platform) حيث تُدعِّم أنظمة التشغيل: ويندوز Windows وماك macOS ولينكس Linux. ويُمكِن اِستخدَامها بسياقات مُتَعدِّدة: على الأجهزة أو على السحاب (cloud) أو على الأجهزة المُدْمَجة (embedded) أو بإنترنت الأشياء (IoT).

عندما تُفكِر ببيئة التطوير ‎.NET Core، فينبغي لمُصطلحات مثل سهولة النشر (flexible deployment) وتَعدُّد المنصات (cross-platform) وأدوات سطر الأوامر والمصدر المفتوح (open source) أن تَكون أول ما يطرأ بذهنك. على الرغم من كَوْنها مفتوحة المصدر، تُدعمها مايكروسوفت بشكل فعال.

الاختيار ما بين ‎.NET Framework و ‎.NET Core

تُعرِّف ‎.NET Standard مُواصَفَات واجهة تطوير التطبيقات (‎.NET APIs) والتي تُمثِل مجموعة من المواصفات الاصطلاحية (contracts) تُصرَّف شيفرتك وفقًا لها. يَتوفَّر أكثر من مُنفِّذ لهذه المواصفات منها بيئتي العمل ‎.NET Framework و ‎.NET Core. يعني ذلك أنهما يشتركان في العديد من المُكوِنات ولكن توجد أيضًا بعض الاختلافات الجوهرية والتي يُساعدك الإطلاع عليها على الاختيار بينهما.

اختيار بيئة عمل ‎.NET Core

يُفضَّل استخدام بيئة عمل ‎.NET Core في الحالات التالية:

  • الحاجة لتشغيل تطبيقك على منصات متعددة مثل ويندوز ولينكس وماك. تُدعِّم بيئة عمل ‎.NET Core أيضًا إمكانية التطوير على الأنظمة المذكورة سلفًا.
  • استهداف الخدمات المُصغرة (microservices).
  • على الرغم من إمكانية استخدام بيئة عمل ‎.NET Framework داخل حاويات ويندوز (Windows containers)، تُعدّ ‎.NET Core أكثر مثالية للحاويات (containers) لما تتميز به من صغر الحجم وخفة الوزن. بالإضافة إلى كونها متعددة المنصات مما يُمكِنك من نشر تطبيقك على حاويات Docker بنظام لينكس على سبيل المثال.
  • تُعدّ ‎.NET Core خيارك الأفضل إذا كنت في حاجة إلى بناء أنظمة عالية المستوى قابلة للتوسع (scalable)، .

اختيار بيئة عمل ‎.NET Framework

على الرغم من أن بيئة عمل ‎.NET Core تُوفِّر الكثير من المميزات خاصة للتطبيقات الجديدة، مع ذلك تَظل بيئة عمل ‎.NET Framework الخيار الطبيعي في كثير من الحالات. مثلًا:

  • إذا كان تطبيقك يعمل بالفعل على بيئة عمل ‎.NET Framework، فأنت عادة لست في حاجة إلى تحويله.

  • على الرغم من توجه المكتبات السريع لتبَنّى مواصفات ‎.NET Standard والذي سيؤدي إلى توافق المكتبة مع جميع المُنفِّذين (implementations)، فقد يَستخدِم تطبيقك مكتبات ‎.NET من طرف ثالث (third-party) أو حزم NuGet غير مُتاحة ببيئة عمل ‎.NET Core. يُمكنك في هذه الحالات استخدام بيئة عمل ‎.NET Framework.

  • اِستخدَام تطبيقك لبعض تقنيات ‎.NET غير المُتوفِّرة ببيئة عمل ‎.NET Core.

  • اِستخدَام تطبيقك لمنصة (platform) غير مُدعَّمة ببيئة عمل ‎.NET Core.

التحويل من ‎.NET Framework إلى ‎.NET Core

عملية تحويل الشيفرة المُطورة أساسًا لاستهداف بيئة عمل ‎.NET Framework بحيث تُصبح متوافقة مع بيئة عمل ‎.NET Core هي عملية بسيطة نسبيًا بغالبية المشروعات خاصة إذا كان نموذج المشروع (app model) متوفرًا بكلتا البيئتين كالمكتبات (libraries) وتطبيقات الطرفية (Console Applications)، أما المشروعات التي تتطلب إنشاء نموذج مشروع (app model) جديد كالانتقال من ASP.NET إلى ASP.NET Core فإن العملية قد تحتاج إلى مزيد من العمل ولكنها بالنهاية تَتَبع نمطًا ثابتًا.

تحويل حل (solution)

إذا كنت تعمل على حل (solution) به أكثر من مشروع، فقد تبدو العملية معقدة. لذلك فمن الأفضل أن تُحوِّل المشروعات تحويلًا تصاعديًا من أسفل لأعلى، بمعنى أن تبدأ أولًا بالمشروعات التي لا تَعتمِد على مشروعات اخرى، ثم تنتقل إلى المشروعات التي تَعتمِد على المشروعات المُحوَّلة وهكذا إلى أن تُحوِّل الحل (solution) بالكامل.

يُمكِنك اِستخدَام احدى الطرائق التالية لتتعرف على الترتيب الذي ينبغي أن تُحوِّل به المشروعات:

  • تُنشِئ أداة Dependency Diagrams بفيجوال ستوديو رسم بياني مُوجَّه (directed graph) لشيفرة الحل.
  • يُولِد الأمر التالي ملف بصيغة تبادل البيانات (JSON) يتضَمَّن قائمة بمَراجِع (references) المشروعات:
msbuild _SolutionPath_ /t:GenerateRestoreGraphFile /p:RestoreGraphOutputPath=graph.dg.json
  • تُعيد أداة .NET Portability Analyzer مُخطط للتبعيات (dependency diagram) عند تفعيل الخاصية -r DGML .

خطوات تحويل مشروع (project)

يُنصَح باتباع الخطوات التالية عند تحويل مشروع بحيث يُصبِح متوافقًا مع ‎.NET Core:

  1. غَيِّر طريقة تَضْمِين التبعيات من صيغة بيئة عمل ‎.NET Framework والموجودة بملف packages.config إلى صيغة PackageReference المُستخدَمة ببيئة عمل ‎.NET Core. لاحظ أن بيئة عمل ‎.NET Core تُضمِن فقط التبعيات المُستخدمة فعليًا بالمشروع بغرض تقليل عدد التبعيات المُضافة. قد تَستخدِم أداة تحويل متوفرة بفيجوال ستوديو للقيام بذلك.

  2. حَوِل صيغة ملف المشروع (project file) إلى الصيغة المُستخدَمة ببيئة عمل ‎.NET Core، والتي تُعدّ أبسط من تلك المُستخدَمة ببيئة عمل ‎.NET Framework. تَسمَح الصيغة الجديدة بتخصيص بيئة العمل المُستهدَفة أثناء بناء المشروع مما يعني أنه من الممكن أن تَستمر باستهداف بيئة عمل ‎.NET Framework حتى تنتهي من عملية التحويل.

  3. اِستهدف بيئة عمل ‎.NET Framework إصدار 4.7.2 أو أحدث بجميع المشروعات.

  4. حَدِث جميع تَبعِيات المشروع إلى آخِر إصدار، فربما لا تُدعِّم الإصدارات القديمة من تلك التبعيات -والتي قد يكون مشروعك مُعتمِدًا عليها- مواصفات واجهة تطوير التطبيقات ‎.NET Standard بينما قد تُدعِّمها الإصدارات الأحدث. قد تَضطرك بعض تلك التحديثات إلى إجراء تعديلات بالشيفرة.

  5. اِستخدِم أداة ‎.NET Portability Analyzer لتحليل شيفرات التجميع (assemblies)، ومعرفة ما إذا كانت قابلة للنقل (portable) إلى بيئة عمل ‎.NET Core، حيث تُولِد هذه الأداة تقرير يحتوي على ملخص لجميع واجهات تطوير التطبيقات (APIs) غير المُتوفرة بـ NET Core والمُستخدَمة بالمشروع. يَتوفَّر لغالبية تلك الواجهات نظير ببيئة عمل ‎.NET Core ستحتاج إلى استخدامه كبديل.

  6. تُمكنك أداة ‎.NET API analyzer من تحديد ما إذا كنت تَستخدِم أي من واجهات تطوير التطبيقات (APIs) بطريقة تَتسبب بحدوث اعتراض من النوع PlatformNotSupportedException أثناء زمن التشغيل.

  7. أخيرًا غَيّر بيئة العمل المستهدفة بملف المشروع من:

   <TargetFramework>net472</TargetFramework>

إلى ‎.NET Core أو ‎.NET Standard:

   <TargetFramework>netcoreapp3.1</TargetFramework>

يَعتمِد الاختيار ما بين ‎.NET Core و ‎.NET Standard على الغرض من المشروع. إذا كان المشروع هو مُجرد مكتبة (library) ستُستخدَم بواسطة تطبيقات اخرى، يُفضَّل عندها استهداف مواصفات واجهة تطوير التطبيقات ‎.NET Standard. في المقابل، ستضطر إلى استهداف بيئة عمل ‎.NET Core إذا كان المشروع يَعتمِد على بعض الواجهات المتوفرة فقط بتلك البيئة، وفي تلك الحالة يُمكِنك أيضًا توفير بناء ثانوي يَستهِدف ‎.NET Standard لكن بخاصيات أقل.

تطبيق طرفية

تَستعرِض الشيفرة التالية تطبيق طرفية بسيط (Console App) باستخدام بيئة العمل ‎.NET Core:

public class Program
{
    public static void Main(string[] args)
    {
        Console.WriteLine("\nWhat is your name? ");
        var name = Console.ReadLine();

        var date = DateTime.Now;
        Console.WriteLine("\nHello, {0}, on {1:d} at {1:t}", name, date);
        Console.Write("\nPress any key to exit...");
        Console.ReadKey(true);
    }
}

ترجمة -وبتصرف- للفصل 24 من كتاب ‎.NET Framework Notes for Professionals





تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن