2010-07-07 4 views
8

मैं आईएल लिखने की कोशिश कर रहा हूं जो mscorlib में विधियों को कॉल करता है, लेकिन मैं ModuleDefinition को mscorlib को वास्तव में & विधियों के संदर्भ में संदर्भित करने के तरीके को समझ नहीं सकता, और दस्तावेज़ & Google की कमी है।मोनो-सेसिल: मैं mscorlib के लिए मॉड्यूल परिभाषा कैसे प्राप्त कर सकता हूं?

उत्तर

8

mscorlib के लिए मॉड्यूल परिभाषा प्राप्त करना बहुत आसान है। यहाँ एक आसान तरीका है:

ModuleDefinition corlib = ModuleDefinition.ReadModule (typeof (object).Module.FullyQualifiedName); 

लेकिन अगर आप कोड है कि mscorlib में तरीकों बुला रहा है इंजेक्षन, आप जरूरी मॉड्यूल अपने आप को लोड करने के लिए नहीं है। उदाहरण के लिए:

MethodDefinition method = ...; 
ILProcessor il = method.Body.GetILProcessor(); 

Instruction call_writeline = il.Create (
    OpCodes.Call, 
    method.Module.Import (typeof (Console).GetMethod ("WriteLine", Type.EmptyTypes))); 

कंसोल कॉल करने के लिए एक निर्देश बनाता है। राइटलाइन();

प्रलेखन के लिए, कृपया विकी पर importing पृष्ठ पढ़ें।

+2

एक्सेल, धन्यवाद! मुझे एहसास नहीं हुआ कि आप .NET प्रतिबिंब वस्तुओं का भी उपयोग कर सकते हैं। सेसिल दस्तावेज आने के लिए काफी मुश्किल है:/ – thecoop

+1

ध्यान रखें कि यह कोड निष्पादन असेंबली के .NET संस्करण के लिए mscorlib से विधि आयात करेगा। इसलिए यदि आप .NET 2.0 असेंबली खोलते हैं और .NET 4.0 के तहत उपर्युक्त कोड चलाकर इसे संशोधित करते हैं, तो संशोधित असेंबली में 2.0 और 4.0 mscorlib दोनों के संदर्भ होंगे, जो संभवतः नहीं था। –

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

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