.NET Core أم .NET Standard: ماذا تختار للمكتبة؟ دليل شامل

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

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

ابدأ الدورة

مقدمة: متاهة مكتبات .NET

\n\n

إذا سبق لك إنشاء مشروع جديد في Visual Studio أو Rider، فمن المحتمل أنك رأيت قالبين متشابهين ولكنهما محيران: Class Library (.NET Core) و Class Library (.NET Standard). يطرح سؤال منطقي: "ما الفرق بالضبط؟ وماذا يجب أن أختار حتى لا أضطر إلى إعادة كتابة كل شيء من الصفر لاحقًا؟".

\n\n

هذا ليس مجرد فضول أكاديمي. على Stack Overflow، جمع هذا السؤال آلاف المشاهدات، والارتباك بين هذين النوعين من المشاريع هو أحد أكثر أخطاء المبتدئين شيوعًا. في هذه المقالة، سنحسم هذا المأزق نهائيًا، ونلقي نظرة على أمثلة حقيقية لكود C#، ونكتشف أي نوع من المكتبات يناسب مهمتك تحديدًا.

\n\n

1. نبذة تاريخية سريعة: من .NET Framework إلى عصر التوحيد

\n\n

لفهم الفرق، علينا أن نتذكر كيف تطورت المنصة. في السابق، كان هناك فقط .NET Framework - بيئة متجانسة لنظام Windows. ثم ظهر .NET Core - نسخة خفيفة الوزن ومتعددة المنصات. وهنا نشأت مشكلة: كيف تكتب مكتبة تعمل على كليهما؟ لهذا، تم اختراع .NET Standard - مواصفات رسمية لواجهات برمجة التطبيقات (API) المضمون وجودها في جميع تطبيقات .NET.

\n\n

ومع ذلك، مع إصدار .NET 5 (ولاحقًا .NET 6، 7، 8)، قامت Microsoft بتوحيد المنصات. الآن هناك فئة أساسية واحدة - .NET (المعروفة سابقًا بـ .NET Core). هذا غيّر قواعد اللعبة بشكل كبير. دعنا نحلل ما يعنيه هذا بالنسبة لنا، نحن المطورين.

\n\n

2. ما هي Class Library (.NET Standard)؟

\n\n

.NET Standard ليس بيئة تشغيل (runtime)، بل مجموعة من العقود (contracts). تخيلها كـ "محول عالمي". إذا قمت بإنشاء مكتبة تستهدف netstandard2.0، فستكون قادرة على العمل على:

\n
    \n
  • .NET Framework 4.6.1+
  • \n
  • .NET Core 2.0+
  • \n
  • .NET 5/6/7/8
  • \n
  • Xamarin، Mono، Unity وحتى UWP
  • \n
\n\n

هذا هو الخيار المثالي إذا كنت بحاجة إلى أقصى تغطية للمنصات. تكتب الكود مرة واحدة - ويعمل في كل مكان يدعم هذه النسخة من المعيار.

\n\n

مثال كود لمكتبة .NET Standard

\n\n

لننشئ مكتبة بسيطة للتعامل مع النصوص، تستهدف netstandard2.0:

\n\n
// StringHelper.cs\nusing System;\nusing System.Text.RegularExpressions;\n\nnamespace MyStandardLibrary\n{\n    public class StringHelper\n    {\n        /// <summary>\n        /// يزيل كل علامات HTML من النص.\n        /// </summary>\n        public static string StripHtmlTags(string input)\n        {\n            if (string.IsNullOrEmpty(input))\n                return string.Empty;\n\n            // تعبير نمطي بسيط لكنه فعال لإزالة العلامات\n            return Regex.Replace(input, "<.*?>", string.Empty);\n        }\n\n        /// <summary>\n        /// يعكس النص من الخلف إلى الأمام.\n        /// </summary>\n        public static string ReverseString(string input)\n        {\n            if (string.IsNullOrEmpty(input))\n                return string.Empty;\n\n            char[] chars = input.ToCharArray();\n            Array.Reverse(chars);\n            return new string(chars);\n        }\n    }\n}
\n\n

لاحظ: نحن نستخدم فقط الفئات الأساسية (System، System.Text.RegularExpressions) المضمون وجودها في جميع تطبيقات .NET Standard 2.0. هذه المكتبة ستعمل حتى في مشروع على .NET Framework 4.6.1، الذي لم تعد Microsoft تطوره، لكنه لا يزال مستخدمًا في القطاع المؤسسي.

\n\n

3. ما هي Class Library (.NET Core / .NET)؟

\n\n

عندما تختار .NET Core Class Library (أو ببساطة .NET Class Library، إذا كان لديك .NET 5+)، فأنت ترتبط بتطبيق معين للمنصة. في ملف المشروع (csproj)، سترى شيئًا مثل <Target

المدونات

توصيات الكتب