2010-02-23 9 views
8

मेरे पास एक असेंबली Library1.dll है जिसमें कुछ इंटरफ़ेस हैं, जिन्हें डेटाबेस में बाइट सरणी के रूप में क्रमबद्ध किया गया था। कुछ कारणों से हमें इंटरफेस गुणों और परिभाषा को बदलना होगा। तो अब मैं माइग्रेशन यूटिलिटी लिख रहा हूं। तो मेरे पास Library1.dll के 2 संस्करण हैं, मेरी उपयोगिता में मैंने एक फ़ोल्डर बनाया है जहां मैं Library1.dll का नया संस्करण संग्रहीत करता हूं। बदले में यह उपयोगिता Library1.dll संदर्भित करती है इसलिए बिन फ़ोल्डर में Library1.dll है लेकिन यह डीएलएल पुराने संस्करण पर संकलित है। Library1.dll का मेरा नया संस्करण एक निजी पथ में संग्रहीत है जिसे मैं तत्काल करने के लिए Assembly.ReflectionOnlyLoadFrom फ़ंक्शन पर जा रहा हूं और इसलिए GetTypes असेंबली पर लोड किया गया है जो मुझे डेटा के रूपांतरण को सक्षम करने में सक्षम बनाता है।असेंबली। रिफ्लेक्शनऑनलीलोड काम नहीं कर रहा

लेकिन निजी मार्ग से Library1.dll लोड करने का प्रयास करते समय मुझे हमेशा ReflectionTypeLoadException मिलता है।

कृपया लोगों की मदद करें !!! किसी भी सहायता की सराहना की जाएगी। मैं वास्तव में अटक गया हूँ।

धन्यवाद, एजी

+0

ReflectionOnlyLoadFromException पर लोडर अपवाद क्या हैं? http://blogs.msdn.com/suzcook/archive/2003/08/11/57236.aspx –

+0

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

+0

डेटा माइग्रेट करने का प्रयास – netmatrix01

उत्तर

16

अपने पुस्तकालय एक और dll को संदर्भित किया जाता है, GetTypes असफल हो जायेगी जब यह एक प्रकार एक बाहरी प्रकार का उपयोग करता है पूरी करता है। सामान्य असेंबली लोडिंग के विपरीत, प्रतिबिंब केवल असेंबली लोडिंग निर्भरताओं को हल नहीं करेगा। आप या तो AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve को सब्सक्राइब कर सकते हैं और आवश्यकतानुसार निर्भरता लोड कर सकते हैं, या आप उन्हें प्री-लोड कर सकते हैं।

इस कोड मैं इस के लिए उपयोग करते हैं:

var assembly = Assembly.ReflectionOnlyLoadFrom(assemblyPath); 
foreach (var assemblyName in assembly.GetReferencedAssemblies()) { 
    try { 
    Assembly.ReflectionOnlyLoad(assemblyName.FullName); 
    } catch { 
    Assembly.ReflectionOnlyLoadFrom(Path.Combine(Path.GetDirectoryName(assemblyPath), assemblyName.Name + ".dll")); 
    } 
} 

यह तो मार्ग से (यह मानते हुए कि निर्भरता ही में है, पूरा नाम से पहले प्रतिबिंब-केवल लोड विधानसभा के सभी निर्भरता लोड करने की कोशिश करेंगे लोड असेंबली के रूप में निर्देशिका)।

+0

अर्ने: आपने हमें यहां बहुत मदद की। हम दीवार के खिलाफ हमारे सिर को बहुत मुश्किल से टक्कर दे रहे थे। –

+0

नमूना कोड के लिए http://blogs.msdn.com/b/junfeng/archive/2004/08/24/219691.aspx देखें जो ReflectionOnlyAssemblyResolve का उपयोग करता है। –

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