/ / पकड़ो dll लोड हो रहा है - .net, dll, load, ondemand

पकड़ो dll लोडिंग - .net, dll, load, ondemand

मैं .NET क्लाइंट सॉफ्टवेयर पैकेज बनाने की कोशिश कर रहा हूं जो मांग पर इसके घटकों को डाउनलोड करता है।

मान लीजिए कि मेरे पास एक कार्यक्रम है जो एक में विभाजित हैमुख्य निष्पादन योग्य और 20 अन्य dll फाइलें। मुख्य कार्यक्रम उनमें से 3 का संदर्भ देते हैं, वे कुछ अन्य का संदर्भ देते हैं, वैसे भी ... उनके पास कुछ प्रकार के वृक्ष हैं जैसे कि निर्भरता संरचना।

मैं जिस चीज को हासिल करने की कोशिश कर रहा हूं, वह सिर्फ मुख्य निष्पादन योग्य वितरित करने और सर्वर लोकेशन ऑन डिमांड से सब कुछ प्राप्त करना है।

कुछ इस तरह: मुख्य कार्यक्रम और ये सभी dll प्रोजेक्ट एक ही समाधान में हैं और किसी भी अन्य समाधान की तरह ही एक साथ बनाए गए हैं। वितरण करते समय, केवल exe वितरित किया जाता है, अन्य dll "(कुछ तृतीय पक्ष लाइब्रेरी का उपयोग किया जाता है) डाउनलोड के लिए उपलब्ध सर्वर स्थान में डाल दिया जाता है।

जब उपयोगकर्ता क्लिक करता है, तो exe चलता है, कुछ UI दिखाता हैएक मेनू आइटम, एक dll फ़ाइलों में से एक और UI विंडो दिखाई जानी है, इसलिए OS dll (जो वहां नहीं है) के लिए दिखता है, मैं हस्तक्षेप करता हूं, सर्वर से आवश्यक dll डाउनलोड करता हूं, इसे exe के बगल में रख देता हूं OS इसे इस तरह से लोड करता है जैसे यह शुरू से ही वहां था।

यह एक आम के उपयोग से प्राप्त होता हैइंटरफ़ेस वर्ग और कुछ प्रतिबिंब जादू लेकिन मैं कुछ और के लिए उम्मीद कर रहा था, कुछ ऐसा है जिसमें पूरी तरह से एक ही समाधान में dll का निर्माण शामिल है, कुछ जिसमें 3 पार्टी पुस्तकालयों की ऑन-डिमांड डाउनलोड शामिल है।

कोई जानकारी यह कैसे करनी है?

उत्तर:

उत्तर № 1 के लिए 1

आप "तलाश रहे हैं AppDomain.AssemblyResolve घटना, जो आपको कस्टम स्थानों से असेंबलियों को लोड करने की अनुमति देता है।
आप जीत गए "किसी अन्य प्रतिबिंब की आवश्यकता नहीं है।


उत्तर № 2 के लिए 1

AppDomain.ResolveAssembly और AppDomain.ResolveType घटनाओं के लिए इवेंट हैंडलर अपने वर्तमान ऐपडोमेन के लिए प्रदान करें और असेंबलियों को लोड करें।

लेकिन विधानसभाओं को सही संदर्भ में लोड करने के लिए सावधान रहें: http://msdn.microsoft.com/en-us/library/dd153782.aspx


उत्तर № 3 के लिए 1

आप असेंबली को जोड़ सकते हैं।

आपको यह लेख पढ़ना चाहिए।