मेरे पास एक मौजूदा ऐप है जो एक ही निर्देशिका में एक डीएलएल में रहता है जो ऐप के रूप में उसी निर्देशिका में रहता है।पी/गतिशील डीएलएल खोज पथ
अब (इस तथ्य के कारण कि कैनन एक क्रैपीएस्ट एपीआई के आसपास का उत्पादन करता है) मुझे इस एपीआई के दो संस्करणों का समर्थन करने और रन-टाइम पर निर्धारित करने की आवश्यकता है जिसे मुझे उपयोग करना चाहिए (पुराना या नया)। चूंकि डीएलएल के पास एक ही नाम है (पहला व्यक्ति अन्य नामों के साथ अन्य डीएलएल लोड करता है, इसलिए केवल पहले नामकरण करने से मेरी मदद नहीं होगी) मुझे उन्हें विभिन्न निर्देशिकाओं में रखना होगा।
इसलिए मेरा प्रश्न: डीएलआईपोर्ट घोषणा में दिए गए डीएलएल की निर्देशिका को नियंत्रित करने के लिए मुझे किन विकल्पों को नियंत्रित करना है?
मुझे लगता है मैं इन दो विचारों के किसी भी कोशिश कर रहा द्वारा शुरू कर सकते हैं:
1) पहली पी/आह्वान करने से पहले मेरी वांछित निर्देशिका स्थापित करने के लिए और फिर इसे बाद में रीसेट "SetDllDirectory" का प्रयोग करें।
2) वांछित DLL को "LoadLibraryEx" का उपयोग करके मैन्युअल रूप से लोड करें और उम्मीद करें कि यह चाल करेगा।
लेकिन क्या पहले प्रयास करने के लिए कोई और ".NET: ish way" है?
अद्यतन: मुझे एहसास है कि मैं डीएलएल को दो अलग-अलग नेट असेंबली में एक्सेस कर सकता हूं और फिर उनमें से प्रत्येक को संबंधित एपीआई फाइलों के साथ एक अलग निर्देशिका में रख सकता हूं। फिर मैं उचित .NET असेंबली को गतिशील रूप से लोड कर सकता हूं और सही डीएलएल की लोडिंग स्वचालित रूप से हो सकती है। कोई कारण नहीं है जो काम नहीं करना चाहिए?
मैं एक के बारे में सोच सकता हूं: मैं इस सामान को डिबग करने के बारे में कैसे जाउंगा? विजुअल स्टूडियो को यह बताना संभव है कि एक असेंबली (मेरे समाधान में निहित) को उपनिर्देशिका में रखा जाएगा और वहां से डीबग किया जाएगा?
इस पल के लिए, मैं आपको अपनी संवेदनाओं के लिए एक +1 दे रहा हूं, मुझे वास्तव में इसकी आवश्यकता है, पिछले छह वर्षों में आपदा के साथ कई बार अपने एपीआई के संपर्क में आने के बाद ... –