كيف يجب أن أكتب تعليمات برمجية تحتوي على أقسام فريدة لإصدارات مختلفة من .NET؟

StackOverflow https://stackoverflow.com/questions/85773

  •  01-07-2019
  •  | 
  •  

سؤال

يحتاج كود المصدر الخاص بي إلى دعم الإصدارين .NET 1.1 و2.0...كيف يمكنني اختبار الإصدارات المختلفة وما هي أفضل طريقة للتعامل مع هذا الموقف.

أتساءل عما إذا كان ينبغي أن يكون لدي قسمين من التعليمات البرمجية مضمنين، في فئات وطرق منفصلة وما إلى ذلك.ماذا تعتقد؟

هل كانت مفيدة؟

المحلول

إذا كنت تريد أن تفعل شيئًا كهذا، فستحتاج إلى استخدام أوامر المعالج المسبق ورموز الترجمة الشرطية.

سأستخدم رموزًا تشير بوضوح إلى إصدار .NET الذي تستهدفه (على سبيل المثال، NET11 وNET20) ثم أقوم بتغليف الكود ذي الصلة على النحو التالي:

#if NET11
// .NET 1.1 code
#elif NET20
// .NET 2.0 code
#endif

السبب وراء القيام بذلك بهذه الطريقة بدلاً من مجرد if/else هو توفير طبقة إضافية من الحماية في حالة نسيان شخص ما تعريف الرمز.

ومع ذلك، يجب عليك حقًا التعمق في السبب وراء رغبتك/حاجتك للقيام بذلك.

نصائح أخرى

هناك الكثير من الخيارات المختلفة هنا.في المكان الذي أعمل فيه نستخدم #if pragmas ولكن يمكن أيضًا القيام بذلك من خلال تجميعات منفصلة للإصدارات المنفصلة.

من الناحية المثالية، يمكنك على الأقل الاحتفاظ بالكود المعتمد على الإصدار في ملفات فئة جزئية منفصلة وإتاحة الإصدار الصحيح في وقت الترجمة.سأطبق هذا إذا كان بإمكاني العودة بالزمن إلى الوراء، فقاعدة التعليمات البرمجية الخاصة بنا تحتوي الآن على مجموعة كبيرة من #if pragmas وفي بعض الأحيان قد يكون من الصعب إدارتها.أسوأ جزء من الأمر #if pragma هو أن Visual Studio يتجاهل فقط أي شيء لن يتم تجميعه مع التعريفات الحالية ولذلك فمن السهل جدًا التحقق من التغييرات العاجلة.

وحدة يدعم كلا من 1.1 و 2.0 ولذا يعد اختيارًا جيدًا لإطار عمل الاختبار.ليس من الصعب جدًا استخدام شيء مثل نانت لإنشاء نسختين منفصلتين 1.1 و2.0 ثم تشغيل اختبارات NUnit تلقائيًا.

أود أن أطرح سؤالاً عن سبب ضرورة الحفاظ على قاعدتين للأكواد، وسأختار إحداهما وأستخدمها إذا كانت هناك أي فرصة لذلك.

إن محاولة الاحتفاظ بقاعدتي تعليمات برمجية متزامنتين مع عدد التغييرات وأنواع التغييرات ستكون معقدة للغاية، وستكون عملية الإنشاء لأي من الإصدارين معقدة للغاية.

واجهتنا هذه المشكلة وانتهى بنا الأمر إلى "طبقة التوافق" حيث قمنا بتنفيذ مجموعة واحدة من الواجهات والتعليمات البرمجية المساعدة لـ .NET v1.1 وv2.0.

ثم قام برنامج التثبيت الخاص بنا بوضع الكود الصحيح للإصدار الصحيح.كنا NSIS (مجانًا!)، ولديها وظائف يمكنك الاتصال بها لتحديد إصدار .NET.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top