2009-12-09 12 views
12

मैं डिस्क पर सहेजकर इसे रनटाइम पर प्रतिबिंबित करके असेंबली पर अपना हाथ लेना चाहता हूं। असेंबली तीसरे पक्ष द्वारा स्मृति में गतिशील रूप से उत्पन्न होती है।स्मृति में संग्रहीत गतिशील रूप से जेनरेट की गई असेंबली को कैसे सहेजना है?

क्या कोई यह जानता है कि यह कैसे करें?

उत्तर

0

आप WinDbg में एसओएस का उपयोग करके ऐसा कर सकते हैं।

समस्या मॉड्यूल को ढूंढ रही है।

यदि आप इसे अपने हाथों में प्राप्त करते हैं, तो मॉड्यूल/असेंबली को फ़ाइल में डंप करने के लिए 'SaveModule' कमांड होता है।

गुड लक :)

+1

ठीक है, फिर से प्रयास करने के बारे में बात करते हुए, आप SaveModule केवल «रन» मॉड्यूल नहीं कर सकते :) –

+0

@JB: यह WinDbg के भीतर से है, मुझे ऐसी सीमाओं से अवगत नहीं है। – leppie

+0

यही कह रहा है। आप मॉड्यूल को देख सकते हैं! डंपडोमेन, लेकिन आप नहीं कर सकते! SaveModule इसे। –

2

प्रयास करें इस (here पाया जाता है):

byte[] dllAsArray; 

using (MemoryStream stream = new MemoryStream()) 
{ 
    BinaryFormatter formatter = new BinaryFormatter(); 

    formatter.Serialize(stream, results.CompiledAssembly); 

    dllAsArray = stream.ToArray(); 
} 
+0

यह सच है। आप उन्हें इंटरनेट पर भी भेज सकते हैं (उदाहरण के लिए डब्ल्यूसीएफ के माध्यम से), इसे दूसरी छोर पर एक असेंबली में डाल दें और इसे लोड करें। मेरा दिमाग खराब कर दिया था। – gjvdkamp

+0

यूप, यह भी काम करता है :) – Roboblob

+0

इसके बजाय आप फ़ाइल पर फ़ाइल.ReadAllBytes का उपयोग कर सकते हैं जो संकलन के समय temp फ़ोल्डर पर संग्रहीत है। –

1

थोड़ा समय के बाद से मैं ऐसा किया, मेरा अनुमान है कि उस प्रोग्राम है कि आप हाथ DLL CompilerParameters.GenerateInMemory का उपयोग करता हो गया है = सच।

बात यह है कि डीएलएल वास्तव में थोड़ी देर के लिए कुछ temp फ़ोल्डर में डिस्क पर सहेजा जाता है (जबकि यह चलता है या कुछ ...) क्योंकि सी # कंपाइलर काम करता है (काम करता है?)।

मुझे याद है कि यह मेरे लिए एक मुद्दा है, लेकिन मुझे अब विवरण वापस लेने में परेशानी हो रही है, एक सेकंड दें। आप प्रोसेसएक्सप्लोरर या इसी तरह के टूल्स के साथ यह पता लगाने के लिए जांच कर सकते हैं कि कौन सी फाइलें सहेजी गईं/छुआ।

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