2013-02-20 32 views
14

मैं Windows स्टोर ऐप्स के लिए .NET पर किसी तृतीय-पक्ष लाइब्रेरी को पोर्ट करने पर विचार कर रहा हूं। पुस्तकालय विधि ओवरलोड पर कॉल के माध्यम से System.Reflection.Emit.OpCodes का अत्यधिक उपयोग करता है।विंडोज स्टोर ऐप एपीआई के लिए .NET में Emit.OpCodes का उद्देश्य?

Windows स्टोर ऐप्स एपीआई के लिए नेट में, OpCode संरचना और OpCodes वर्ग शामिल किए गए हैं, लेकिन कोई ILGenerator वर्ग है, और जहाँ तक मैं या तो कोई प्रतिस्थापन पता लगाने के लिए सक्षम है।

मैं स्पष्ट रूप से कुछ याद आ रही है, लेकिन: ILGenerator वर्ग के बिना, क्या System.Reflection.Emit.OpCode और Windows स्टोर ऐप्लिकेशन एपीआई के लिए .NET में OpCodes सहित का उद्देश्य है?

+3

अच्छा सवाल है, लेकिन कई लोगों द्वारा उत्तरदायी होने की संभावना नहीं है। मैं बस इतना कह सकता हूं कि उन्हें अभी भी कुछ आंतरिक उद्देश्यों के लिए जरूरी है और उन्हें उजागर करने में कोई "नुकसान" नहीं है (जितना अधिक 'स्थानीय वैरिएंबल इंफो' उपलब्ध है, लेकिन मुझे प्राप्त करने के लिए कोई समझदार तरीका नहीं मिला है) –

+1

@Damien_The_Unbeliever कई इस मुद्दे में अधिक बारीकी से देखने के लिए धन्यवाद। मुझे 'प्रतिबिंब। प्रवेश' नामस्थान के साथ थोड़ा सा अनुभव है, इसलिए मैंने सोचा कि मैं पूछूंगा, लेकिन स्पष्ट रूप से यह तुरंत स्पष्ट नहीं है कि क्यों केवल 'ओपोड' और 'ओपकोड' सभी के बाद उपलब्ध रहते हैं :-) –

+1

यदि आपको प्रतिस्थापन की आवश्यकता है ILGenerator के लिए। स्वीकार करें, मोनो - सेसिल पर एक नज़र डालें। मैंने इसका उपयोग नहीं किया है, लेकिन अन्य इसे अभिव्यक्ति वृक्ष दुभाषिया के रूप में उपयोग करते हैं: http://www.mono-project.com/Cecil –

उत्तर

1

अच्छा सवाल।

  1. का उपयोग कर कोड का एक टुकड़ा इकट्ठा ILGenerator
  2. : एक ओर जहां मुझे यकीन है कि के लिए नहीं कह सकता, वहाँ केवल दो कारणों से मुझे लगता है कि उपयोग OPCODE/opcodes के बारे में सोच सकते हैं (और मैं वास्तव में कल्पना नहीं कर सकते यह कुछ और के लिए प्रयोग किया जाता है) कर रहे हैं F.ex. का उपयोग कर कोड का एक टुकड़ा अलग करें MethodInfo.GetMethodBody और उसके बाद आईएल कोड

युक्त बाइट्स को पार्स करना, क्योंकि यह पूर्व नहीं है, मुझे लगता है कि वे बाद वाले का उपयोग कर रहे हैं। इसके लिए आवेदन स्थिर कोड विश्लेषण है; मैं खुद इसे f.ex. का उपयोग करता हूँ। कुछ मजाकिया व्यवहार को लागू करने और यह पता लगाने के लिए कि लैम्ब्डा अभिव्यक्ति क्या थी, (इस मामले में अभिव्यक्तियों का उपयोग नहीं किया जा सका)। कोड परिदृश्य के अन्य अनुप्रयोग जो इस परिदृश्य में अधिक संभावना हो सकते हैं यह जांच कर रहा है कि कुछ वर्ग/विधियों/संरचनाओं का उपयोग किया जाता है, जिन्हें अस्वीकृत किया जाता है (मैं कल्पना कर सकता हूं कि वे नहीं चाहते हैं कि आप कुछ कार्यक्षमता का उपयोग करें)।

+0

बाद वाले विंडोज़ स्टोर में उपलब्ध नहीं है [या तो] (http://msdn.microsoft.com/en-us/library/system.reflection.methodinfo.aspx)। –

+0

ठीक है, आईएल बाइट्स प्राप्त करने के एक से अधिक तरीके हैं, एक तरह से एक डीएलएल अपलोड करना और मैन्युअल रूप से इसे अलग करना है। माना जाता है, ऐसा लगता है कि यह बहुत दूर है। – atlaste

+1

लेकिन आईएल बाइट्स प्राप्त करने के लिए सभी ढांचे के तरीकों को अवरुद्ध कर दिया गया प्रतीत होता है।हां, आप मैन्युअल रूप से अलग-अलग हो सकते हैं - जैसे कि आप 'ओपकोड' को स्वयं परिभाषित कर सकते हैं, अगर आप ऐसा करने जा रहे थे। –

1

आप मोनो सेसिल System.Reflection के कार्यों में से कुछ को बदलने के लिए उपयोगी साबित हो सकते, आधिकारिक तौर पर वहाँ WinRT के लिए इसके बारे में कोई बंदरगाह है, लेकिन अनाधिकारिक, वहाँ एक बंदरगाह उपलब्ध here है, बस ध्यान दें कि सिल्वरलाइट संस्करण में आधारित है मोनो सेसिल का।

यह भी ध्यान रखें कि आप अपने ऐप पैकेज के बाहर डीएलएस और exes को संशोधित नहीं कर सकते हैं, यह WinRT सैंडबॉक्स का एक सुरक्षा उपाय है।

+0

धन्यवाद, @ राफेल, मैं इसे एक दूसरा रूप दूंगा। –

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

  • कोई संबंधित समस्या नहीं^_^