7

मैं अपने पसंदीदा प्रोग्रामिंग लैंगेज नेमेरले को सिल्वरलाइट समर्थन जोड़ने की कोशिश कर रहा हूं।प्रतिबिंब के माध्यम से mscorlib 2.0.5.0 (उर्फ सिल्वरलाइट mscorlib) में प्रकार प्राप्त करना?

Nemerle, संकलन प्रक्रिया पर, प्रतिबिंब के माध्यम से सभी प्रकार के लोड करता है मुख्य रूप से 2 कदम

1-) में विधानसभा लोड करने के लिए 2-) Usese Assembly.GetTypes Assembly.LoadFrom का उपयोग करता है() प्रकार प्राप्त करने के लिए

फिर संकलन के अंत में यह हल किए गए प्रकारों को प्रतिबिंब के साथ उत्सर्जित करता है। स्वीकार करें।

यह प्रक्रिया चांदी की रोशनी के mscorlib को छोड़कर सिल्वरलाइट सहित सभी असेंबली के लिए काम करती है।

सी # में यह विफल रहता है:

var a = System.Reflection.Assembly.LoadFrom(@"c:\mscorlib.dll"); 

लेकिन यह गुजरता है:

बाद में
var a = System.Reflection.Assembly.ReflectionOnlyLoadFrom(@"c:\mscorlib.dll"); 

बू, a.GetTypes() एक अपवाद फेंकता कह System.Object के माता-पिता मौजूद नहीं है।

क्या कोई रास्ता है?

+0

आप सिल्वरलाइट खुद या से कर रहे हैं मानक सीएलआर? –

उत्तर

5

मान लीजिए कि आप मानक सीएलआर से सिल्वरलाइट के एमएसकोरिब पर प्रतिबिंबित करने की कोशिश कर रहे हैं, यह काम नहीं करेगा क्योंकि सीएलआर mscorlib के कई संस्करणों को लोड करने की अनुमति नहीं देता है। (शायद ऐसा इसलिए है क्योंकि यह इसके मूल प्रकारों के संकल्प को परेशान कर सकता है)।

मोनो। सेसिल का उपयोग करने के लिए एक वर्कअराउंड है: 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; 
1

आप Silverlight विधानसभा के साथ Nemerle संकलन कर सकते हैं और फिर आप Nemerle के शीर्ष पर काम कर रहा है सिल्वरलाइट :)

संबंधित मुद्दे

 संबंधित मुद्दे