2008-08-22 28 views
21

मेरा आवेदन गतिशील विशिष्ट सबफ़ोल्डर से कार्यावधि में विधानसभाओं लोड करता है। इन विधानसभाओं को अन्य असेंबली पर निर्भरताओं के साथ संकलित किया जाता है। रनटाइम इन्हें एप्लिकेशन निर्देशिका से लोड करने की कोशिश करता है। लेकिन मैं उन्हें मॉड्यूल निर्देशिका में रखना चाहता हूं।लोड हो रहा है विधानसभाओं और उसके निर्भरता

वहाँ एक रास्ता क्रम कि DLLs एक अलग सबफ़ोल्डर में हैं बताने के लिए है?

उत्तर

18

एक अच्छा दृष्टिकोण मैं हाल ही में उपयोग किया है AppDomain के AssemblyResolve घटना के लिए एक ईवेंट हैंडलर जोड़ने के लिए है।

AppDomain currentDomain = AppDomain.CurrentDomain; 
currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler); 

तब ईवेंट हैंडलर विधि में आप विधानसभा कि Assembly.Load, Assembly.LoadFrom ओवरराइड से एक का उपयोग और यह विधि से लौटने हल किया जा करने का प्रयास किया गया था लोड कर सकते हैं।

संपादित करें:

अपने अतिरिक्त जानकारी के आधार पर मैं तकनीक का उपयोग कर लगता है कि इसके बाद के संस्करण, विशेष रूप से एक विधानसभा के लिए संदर्भ के समाधान अपने आप को केवल वास्तविक दृष्टिकोण है कि अपने अनुप्रयोग के पुनर्गठन के बिना काम करने के लिए जा रहा है है। यह आपको क्या देता है कि सीएलआर को हल करने में असफल होने वाली प्रत्येक असेंबली का स्थान आपके कोड द्वारा रनटाइम पर निर्धारित और लोड किया जा सकता है ... मैंने इसे समान परिस्थितियों में दोनों प्लग करने योग्य आर्किटेक्चर और असेंबली संदर्भ अखंडता के लिए उपयोग किया है स्कैनिंग उपकरण।

+3

इस तकनीक का एक अच्छा उदाहरण एप्लिकेशन LINQPad है। यह एक exe के रूप में जहाज, तो सभी पुस्तकालयों एम्बेडेड संसाधनों के रूप में शामिल हैं। जानकारी के लिए http://www.linqpad.net/HowLINQPadWorks.aspx कोड के लिए http://www.albahari.com/nutshell/ch16.aspx देखें और। – Pat

4

आप एक मैनिफ़ेस्ट फ़ाइल में <probing> तत्व का उपयोग अपने विधानसभा फ़ाइलों के लिए अलग निर्देशिका में देखने के लिए क्रम में बताने के लिए कर सकते हैं।

http://msdn.microsoft.com/en-us/library/823z9h8w.aspx

उदा .:

<configuration> 
<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <probing privatePath="bin;bin2\subbin;bin3"/> 
    </assemblyBinding> 
</runtime> 
</configuration> 
1

आप <codeBase> तत्व आवेदन विन्यास फाइल में पाया उपयोग कर सकते हैं। "Locating the Assembly through Codebases or Probing" पर अधिक जानकारी।

ठीक है, लोड की गई असेंबली में कोई एप्लिकेशन कॉन्फ़िगरेशन फ़ाइल नहीं है।

ठीक है अगर आप रनटाइम पर विशिष्ट फ़ोल्डरों को जानते हैं तो आप Assembly.LoadFrom का उपयोग कर सकते हैं।

+0

पहले लिंक देता है "विषय अब मौजूद नहीं है"। .NET 4.0 निर्दिष्ट करना हालांकि इसे लाता है: [https://msdn.microsoft.com/en-us/library/15hyw9x3%28v=vs.100%29.aspx ](https://msdn.microsoft.com/en -US/पुस्तकालय/15hyw9x3% 28v = vs.100% 29.aspx) – AnorZaken

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