मेरे पास एक ऐसा प्रोग्राम है जिसे अपने होस्ट पर प्लगइन डीएलएल खोजने की जरूरत है।एक विशेष इंटरफेस के साथ .NET असेंबली के लिए डीएलएल स्कैनिंग - कुछ डीएलएल R6034 फेंक देते हैं!
यह सभी डीएलएल को एक (काफी बड़े) पथ के भीतर समझाकर करता है। इस पथ में देशी डीएलएल समेत कई चीजें शामिल हैं।
foreach (var f in Directory.EnumerateFiles(@"c:\Program Files", "*.dll", SearchOption.AllDirectories))
{
try
{
var assembly = Assembly.LoadFile(f);
var types = assembly.GetTypes();
foreach (var type in types)
{
if (type.GetInterface("My.IInterface") != null)
{
plugins.Add(f);
break;
}
}
assembly = null;
}
catch (Exception e)
{
}
}
मेरी स्कैनर एक एमएस क्रम DLL (उदाहरण के लिए, msvcm80.dll) मैं एक uncatchable रनटाइम त्रुटि R6034 प्राप्त मारता है: "। एक आवेदन गलत तरीके से सी क्रम लाइब्रेरी लोड करने की कोशिश की है" यह विंडो प्रोग्राम के निष्पादन को अवरुद्ध करती है। मैं यह डीएलएल नहीं चाहता (जाहिर है); क्या इस स्थिति से एक ग़लत त्रुटि प्राप्त करने का कोई तरीका है?
[संबंधित क्ष: वहाँ अगर एक DLL, एक .NET विधानसभा या नहीं है अगर है कि DLL वर्तमान प्रक्रिया अंतरिक्ष में लोड नहीं है का निर्धारण करने के लिए एक कुशल (जैसे गैर अपवाद) तरीका है]
ReflectionOnlyLoadFrom पर दिलचस्प। बहुत बुरा यह एपडोमेन में किसी दिए गए नाम की एक असेंबली को लोड करने की समान सीमाएं है। और वैकल्पिक ऐपडोमेन का उपयोग करना असाधारण रूप से दर्दनाक है; मैं किसी ऐसे व्यक्ति को नहीं ढूंढ पाया जिसने सफलतापूर्वक वर्णन किया कि कैसे एक और ऐपडोमेन लेना है, सफलतापूर्वक असेंबली लोड करना (विशिष्ट प्रकारों को निर्देशित किए बिना), और फिर उन असेंबली के गुणों से पूछताछ करना। Bleah। – Joe