2010-06-07 5 views
5

मैं अपने .NET प्रोजेक्ट में ActiveX माइक्रोसॉफ़्ट एक्सेल 11.0 ऑब्जेक्ट लाइब्रेरी जोड़ने की कोशिश कर रहा हूं। यह मेरे कंप्यूटर पर ठीक काम करता है, लेकिन जब मैं अपने कोड में चेक करता हूं, तो यह मेरे सहकर्मी पर काम नहीं करता है। इसे ठीक कर दिया और उसने मेरा तोड़ दिया। जोड़े जाने पर, हमारी मशीनों के बीच नामस्थान अलग-अलग होते हैं।एक्सेल COM इंटरऑप - tlbimp बनाम प्राथमिक WrapperTool

यह पता चला है कि जब मैं संदर्भ जोड़ता हूं तो यह tlbimp को रैपरटूल के रूप में उपयोग करता है, लेकिन उसके लिए यह primary संदर्भ बनाता है।

मैं इसे हम दोनों के लिए कैसे काम करूं? उनकी मशीन tlbimp आयातित इंटरऑप पसंद नहीं करती है, और मुझे primary इंटरऑप पसंद नहीं है।

उत्तर

4

हमें एक ही समस्या थी, और विकल्प "tlbimp" सभी कंप्यूटरों पर काम करता था।

मेरी (अपूर्ण) समझ है: .NET COM घटकों तक पहुंचने के लिए रैपर असेंबली का उपयोग करता है। यदि आप "प्राथमिक" निर्दिष्ट करते हैं, तो आप मौजूदा, पूर्व-जेनरेट की गई "प्राथमिक इंटरऑप असेंबली" का उपयोग करते हैं। http://msdn.microsoft.com/en-us/library/hfac4fky.aspx के अनुसार, "प्राथमिक इंटरऑप असेंबली उसी प्रकाशक द्वारा प्रदान की जाने वाली टाइप लाइब्रेरी के रूप में प्रदान की जाती है"। यदि "प्राथमिक" का उपयोग करना आपके लिए काम नहीं करता है, तो यह असेंबली आपके कंप्यूटर पर मौजूद नहीं है।

डिफ़ॉल्ट "tlbimp" है और (जो मैंने एकत्र किया है) सामान्य रूप से काम करना चाहिए। यदि यह आपके सहकर्मी की मशीन पर काम नहीं करता है, तो त्रुटि संदेश उपयोगी होगा। VS2003 के लिए त्रुटियों की सूचना दी गई थी (केबी आलेख की खोज करें "जब आप Windows XP सर्विस पैक 2 को स्थापित करने के बाद Visual Studio .NET में COM ऑब्जेक्ट का संदर्भ जोड़ते हैं तो आपको एक त्रुटि संदेश प्राप्त होता है), लेकिन मुझे नहीं पता कि यह लागू होता है या नहीं वीएस के मौजूदा संस्करणों के लिए।

यदि आप यह काम नहीं कर सकते हैं, तो मैं सुझाव दूंगा कि आप "प्राथमिक इंटरऑप असेंबली" के बारे में और अधिक पढ़ सकते हैं और यह पता लगाने का प्रयास करें कि एक्सेल के लिए प्राथमिक इंटरऑप असेंबली आपके सहकर्मी की मशीन पर स्थित है, फिर इसे मशीनों पर कॉपी करें सभी डेवलपर्स

उम्मीद है कि इससे मदद मिलती है।

+0

धन्यवाद। इससे मेरी मदद की। –

+0

मैंने COM संदर्भ हटा दिया, फिर इसे फिर से जोड़ा। जब मैंने इसे जोड़ा, तो WrapperType विशेषता आपके द्वारा उल्लिखित मान में बदल गई। फिर सब कुछ काम किया। –

0

मैं registy संपादन करके इस का समाधान करने में सक्षम था:

HKEY_CLASSES_ROOT \ TypeLib {2DF8D04C-5BFA-101B-BDE5-00AA0044DE52} \ 2.4

यह अस्तित्व में है, और मैं निम्नलिखित स्ट्रिंग मान कहा:

नाम: PrimaryInteropAssemblyName
मूल्य: कार्यालय, संस्करण = 12.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = 71e9bce111e9429c