الحصول على أنواع في Mscorlib 2.0.5.0 (المعروف أيضا باسم Silverlight Mscorlib) عبر التفكير؟
-
09-09-2019 - |
سؤال
أحاول إضافة دعم Silverlight إلى البرمجة المفضلة Langauge Nemerle.
nemerle، في إجراءات التجميع، يتم تحميل جميع الأنواع عن طريق التفكير أساسا في خطوتين
1-) يستخدم الجمعية. تحميل من أجل تحميل التجميع 2- Associations usees.gettypes () للحصول على الأنواع
ثم في نهاية المجموعات التي تنبعث منها أنواع حل مع انعكاس.
يعمل هذا الإجراء لجميع الجمعيات بما في ذلك Silverlight Orchen باستثناء Mscorlib of Silverlight.
في C # هذا فشل:
var a = System.Reflection.Assembly.LoadFrom(@"c:\mscorlib.dll");
ولكن هذا يمر:
var a = System.Reflection.Assembly.ReflectionOnlyLoadFrom(@"c:\mscorlib.dll");
BU في الأخير، A.Gettypes () يلقي استثناء Sayin System.Object الأصل غير موجود.
هل هناك طريقة للخروج ؟
المحلول
على افتراض أنك تحاول التفكير في Mscorlib Silverlight من CLR القياسية، فلن يعمل هذا لأن CLR لا يسمح بتحميل إصدارات متعددة من MSCORLIB. (ربما هذا لأنه يمكن أن يزعج حل أنواعها الأساسية).
الحل البديل هو استخدام mono.cecil لتفقد الأنواع:http://mono-project.com/cecil.. وبعد تؤدي هذه المكتبة بالفعل بشكل أفضل من انعكاس .NET ومن المفترض أن تكون أكثر قوة.
إليك بعض الكود لتبدأ:
AssemblyDefinition asm = AssemblyFactory.GetAssembly(@"C:\mscorlib.dll");
var types =
from ModuleDefinition m in asm.Modules
from TypeDefinition t in m.Types
select t.Name;
نصائح أخرى
يمكنك تجميع Nemerle مع جمعية Silverlight ثم لديك Nemerle تعمل على قمة Silverlight :)