الاستهداف المتعدد
ابنِ مكتبة واحدة لأطر عمل هدف متعددة من مشروع واحد؛ واستخدم الترجمة الشرطية وبدائل التوافق لاختلافات واجهات API.
الاستهداف المتعدد درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 3 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 3 دروس في المجموع.
المفهوم والفوائد
الهدف: نشر حزمة واحدة تعمل على منصات متعددة.
- ينتج المشروع الواحد ملفات ثنائية متعددة
- يحصل المستهلكون تلقائيًا على التجميعة الأنسب
- استخدم حواجز #if صغيرة عند اختلاف واجهات برمجة التطبيقات
أساسيات اختيار الأصول
- تحتوي الحزمة على مجلدات لكل هدف، مثل lib/net45 وlib/netstandard2.0
- يختار NuGet الأصل المتوافق الأقرب
- حافظ على اتساق واجهة برمجة التطبيقات العامة؛ ويجب أن يختلف الرمز الداخلي فقط
عرض توضيحي للترجمة الشرطية
استخدم كتل #if صغيرة لتغيير التنفيذ. وحافظ على تطابق توقيع الدالة العامة.
#define NET45 // simulate building for different targets
// #define NETSTANDARD2_0
using System;
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Target: " + TargetName());
}
// Public API: stays the same across targets
public static string TargetName()
{
#if NET45
return "net45 build";
#elif NETSTANDARD2_0
return "netstandard2.0 build";
#else
return "unknown target";
#endif
}
}
واجهة برمجة تطبيقات مستقرة وطبقات داخلية
حافظ على واجهة برمجة التطبيقات العامة نفسها؛ وأخفِ الاختلافات خلف طبقات صغيرة حتى لا يهتم المستدعون بالهدف المستخدم.
#define NET45
using System;
using System.IO;
public class Program
{
// Public API is stable; internal implementation differs.
public static string ReadAllTextCompat(string path)
{
#if NET45
// net45 has File.ReadAllText; use it directly.
return File.ReadAllText(path);
#else
// Example shim path (for an older TF that lacks some helper API)
using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
using (var sr = new StreamReader(fs))
{
return sr.ReadToEnd();
}
#endif
}
public static void Main(string[] args)
{
// For demo, write then read
string p = "demo.txt";
File.WriteAllText(p, "hello");
Console.WriteLine(ReadAllTextCompat(p));
}
}
نصائح الإعداد
- استخدم TargetFrameworks بصيغة الجمع في المشروع لسرد الأهداف
- احصر #if في مساعدين صغيرين، وحافظ على مشاركة معظم الرمز
- اختبر كل هدف، وشغّل اختبارات الوحدة لكل TFM
- انشر حزمة واحدة تتضمن أصول جميع الأهداف
المشكلات الشائعة
- لا تكشف واجهات برمجة تطبيقات عامة مختلفة لكل هدف
- تجنّب تداخلات #if العميقة؛ واستخدم طبقات صغيرة
- انتبه إلى الاختلافات الضمنية في السلوك، مثل المسارات والترميزات
- وثّق أي قيود خاصة بهدف معين
لماذا الاستهداف المتعدد
الخلاصة
الخلاصة: يتيح الاستهداف المتعدد نشر عدة ملفات ثنائية من مشروع واحد. حافظ على اتساق واجهة برمجة التطبيقات العامة، وأخفِ الاختلافات خلف طبقات #if صغيرة، واجمع جميع الأهداف في الحزمة.
الأسئلة الشائعة
هل درس «الاستهداف المتعدد» مجاني؟
نعم — نص درس «الاستهداف المتعدد» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 3 دروس في المجموع.
ماذا ستتعلم في «الاستهداف المتعدد»؟
ابنِ مكتبة واحدة لأطر عمل هدف متعددة من مشروع واحد؛ واستخدم الترجمة الشرطية وبدائل التوافق لاختلافات واجهات API. تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟
لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 3.
كم من الوقت يستغرق درس «الاستهداف المتعدد»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟
نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.