سؤال

هل من الممكن إنشاء المكتبة التي يمكن استهلاكها من صافي 2.0 ويسمح أيضا صافي 3.0+ المستهلكين للاستفادة من DataContracts إذا رغبوا في ذلك؟

وأنا لا أرى أي عائق فني لهذا بخلاف المكتبة التي تحتوي على سمات تتعلق DataContract مختلفة هي مكتبة صافي 3.0. ويمكن تنفيذ هذه الصفات يدويا بطريقة مماثلة لExtensionMethodAttribute؟

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

المحلول

إذا قمت بإضافة سمات Framework 3.0 لتجميع، ثم تشغيل هذا على جهاز مع NET 2.0 فقط، هذا لا يرقى إلى وجود السمة على التعليمات البرمجية من التجمع غير متوفر في وقت التشغيل.

وهذا سوف نعمل في الغالب غرامة طالما تطبيق NET 2.0 لا يحاول في الواقع لقراءة السمات. على سبيل المثال، فإن البرمجية التالية رمي FileNotFoundException لأنها ستفشل لتحميل System.ServiceModel.dll إذا تشغيلها على جهاز مع NET 2.0:

[ServiceContract] // Attribute from System.ServiceModel.dll
class MyClass
{
  ...
}
...
    // this will throw a FileNotFoundException if System.ServiceModel.dll is not available
    object[] attributes = typeof(MyClass).GetCustomAttributes(false);

لذلك إذا كنت لا تعرف الذين سيتم المستهلكة مكتبة صفك، لا نستطيع أن نضمن 100٪ أن فلن الخروج منها.

ما سبق يمكن تجنبها عن طريق الشحن نسخة من System.ServiceModel.dll (أو التجميع الأخرى التي تحتوي على سمات كنت تستخدم) مع التطبيق الخاص بك، أو (على ما أظن) باستخدام الزائد من GetCustomAttributes أن يأخذ System.Type حجة، لذلك يمكنك قراءة فقط السمات التي هي معروفة لتكون متاحة.

نصائح أخرى

ومنذ الصافي 2.0 و. NET 3.0 و 3.5 استخدام نفس CLR (2.0)، وينبغي أن لا يكون لديك أي صعوبات.

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