2010-05-19 14 views
6

एक ग्राहक वीबी 6 से हमारे .NET DLL का उपभोग करना चाहता है। वे रिवर्स इंटरऑप का समर्थन करने के लिए डिज़ाइन किए गए हैं और सभी ठीक काम करते हैं ... सिवाय इसके कि: दो अलग-अलग निर्देशिकाओं में दो अलग-अलग वीबी 6 प्रोग्राम हैं। ऐसा लगता है यह में से एक कार्य करने के लिए आवश्यक है: दोनों निर्देशिका मेंCOM प्रोग्राम कैसे COM इंटरॉप के लिए पंजीकृत .NET DLL का पता लगाता है?

  1. कॉपी नेट DLL, या
  2. GAC में नेट DLL स्थापित

यह ग्राहक के अवलोकन है और यह भी समर्थित RegAsm documentation द्वारा:

एक विधानसभा Regasm.exe का उपयोग कर पंजीकरण के बाद आप वैश्विक विधानसभा कैश में स्थापित कर सकते हैं इतना है कि यह किसी भी COM क्लाइंट से सक्रिय किया जा सकता है। यदि असेंबली केवल एक ही अनुप्रयोग द्वारा सक्रिय होने जा रहा है, तो आप उस एप्लिकेशन की निर्देशिका में रख सकते हैं।

मैं इस बिंदु पर उलझन में हूं।

भ्रम की प्रथम बिंदु:

जहां तक ​​मैं समझता हूँ, COM क्रम DLL प्रोग्राम आईडी/कक्षा आईडी का उपयोग कर स्थित। जब मैं कक्षा आईडी प्रविष्टि में रजिस्ट्री में देखता हूं, तो मुझे कोडबेस कुंजी में .NET DLL का पूरा पथ दिखाई देता है। ऐसा क्यों है कि प्रोग आईडी/क्लास आईडी का उपयोग कर एक COM प्रोग्राम कोडबेस का उपयोग कर .NET DLL का पता नहीं लगाता है?

भ्रम का दूसरा बिंदु:

GAC नेट के लिए विशिष्ट है। COM संदर्भों को हल करने में यह कैसे शामिल है?

उत्तर

6

आप सही हैं COM COM लोड करने के लिए COM सर्वर पर जाने के लिए क्लास आईडी प्राप्त करने के लिए प्रोगिड का उपयोग करता है। .NET COM dlls के मामले में, COM सर्वर वास्तव में MSCOREE है, न कि .NET dll ({CLSID}/localserver32 के अंतर्गत डिफ़ॉल्ट कुंजी का मान)। MSCOREE, COM नहीं, फिर .NET असेंबली को ढूंढने के लिए जो भी नियम चाहते हैं उसका उपयोग कर सकते हैं।

इस बिंदु पर, मुझे नहीं पता कि .NET वास्तव में क्या करता है - जिसके लिए परीक्षण की आवश्यकता होगी। आप FUSLOGVW का उपयोग करके स्वयं को देख सकते हैं। हालांकि मुझे लगता है कि यह असेंबली लोड करता है जैसे कि यह किसी अन्य .NET असेंबली को लोड करता है।

मान लीजिए कि यह सिर्फ ClassName मान के साथ विधानसभा.लोड() को कॉल करता है, यह .NET binding rules का पालन करेगा। जीएसी में पहली बार देखें, यदि नहीं मिला तो जांच होगी - इसलिए यदि कोई कोडबेस परिभाषित किया गया है, तो यह केवल वहां दिखाई देगा, अन्यथा यह एप्लिकेशन बेस के आधार पर जांच करेगा (डिफ़ॉल्ट रूप से ऐप की निर्देशिका [लेकिन एएसपी.नेट के लिए नहीं) ])।

मुझे लगता है कि आपके नियम में पढ़ने के साथ फिट बैठता है।

आपका प्रश्न तो पुराने मुझे लगता है यह OBE हो गया है, लेकिन नियमों आप अनुप्रयोग निर्देशिका में विधानसभाओं डालने के लिए उपयोग करना चाहते हैं, एक codebase, या GAC में का उपयोग कर रहे हैं के साथ एक ही है और w/ओ कॉम इंटरऑप। हर स्थिति अलग होती है और मैंने कोई गहरी अंतर्दृष्टि छोड़ने के लिए पर्याप्त .NET नहीं किया है। मैं xcopy इंस्टॉल का समर्थन करता हूं इसलिए मैं ऐप निर्देशिका में जाउंगा (और registration free COM का उपयोग करें) लेकिन अन्य विचार हैं जैसे कि दो वीबी ऐप्स को COM ऑब्जेक्ट के समान संस्करण का उपयोग करना चाहिए।

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