मैं रनटाइम (SerializationException for dynamically loaded Type) पर लोड कुछ डीएल की असेंबली को हल करते समय अपवादों को संभालने के लिए AppDomain.AssemblyResolve
ईवेंट का उपयोग करने का प्रयास कर रहा हूं।AppDomain.Assembly के साथ काम करना
जब घटना निकाल दिया जाता है, मैं अपनी निर्देशिका में सभी DLLs लोड और एक Assembly
सारिणी निर्मित, तो मैं इस विधि का उपयोग प्रकार युक्त Assembly
पाने के लिए मैं निर्दिष्ट करें:
public static Assembly GetAssemblyContainingType(String completeTypeName, Assembly[] assemblies)
{
Assembly assembly = null;
foreach (Assembly currentassembly in assemblies)
{
Type t = currentassembly.GetType(completeTypeName, false, true);
if (t != null)
{
assembly = currentassembly;
break;
}
}
return assembly;
}
समस्या यह है कि है कोड केवल AssemblyQualifiedName
के साथ काम करता है, और घटना द्वारा प्रदत्त ResolveEventArgs.Name
इतना उपयोगी नहीं है।
क्या आप मुझे कुछ कामकाज सुझा सकते हैं?
वहाँ जब यह सक्रिय किए जाने पर इस घटना के लिए कुछ अन्य तर्क पारित करने के लिए एक तरीका है? अपने ज्ञात निर्देशिका से विधानसभाओं के साथ, इस तरह
private readonly IDictionary<string,Assembly> additional =
new Dictionary<string,Assembly>();
लोड इस शब्दकोश:
असेंबली को प्रीलोड नहीं करना असेंबली रीसोल्व इवेंट हैंडलर की आवश्यकता को रोकता है? –
@ माइकज़ जहां तक मुझे पता है, 'असेंबली.लोड (असेंबलीनाम)' का उपयोग करके एक असेंबली लोड करना स्वचालित रूप से इसे आपके एप्लिकेशन डोमेन के असेंबली रिज़ॉल्यूशन कोड पर उपलब्ध नहीं करता है (जब तक वह कोड डिफ़ॉल्ट रिज़ॉल्यूशन का उपयोग करके असेंबली तक नहीं पहुंच सकता प्रक्रिया)। यह कोड एक कार्य प्रणाली से उठाया गया है (मैंने एरर हैंडलिंग कोड हटा दिया है, उदाहरण के लिए 'अतिरिक्त .ryGetValue (e.Name, out res)' कॉल को थोड़ा सा सरल बनाने के लिए कॉल करें)। जब मैं 'ResolveAssembly' हुक निकालने के लिए, मेरे कार्य प्रणाली काम कर रही :) – dasblinkenlight
आप शब्दकोश के निर्माण कर रहे हैं, AssemblyName.GetAssemblyName का उपयोग () Assmebly.Load के बजाय फ़ाइल नाम की मैपिंग के विधानसभा नाम पाने के लिए और बिना शर्त से बचने के बंद हो जाता है सभी विधानसभाओं को लोड करना। –