2012-02-02 9 views
9

लोड करने में विफल रहता है मुझे कई वीसी ++ डीएलएल के साथ समस्या है, जिसे मुझे अपने .NET/C# प्रोजेक्ट में शामिल करना चाहिए। एक वीसी ++ डीएलएल एक सी ++/सीएलआई डीएलएल है, जिसे मैं अपने .NET प्रोजेक्ट से सार्वजनिक इंटरफ़ेस के रूप में उपयोग करता हूं। अन्य डीएलएल देशी सी ++ में लिखे गए हैं। मेरे पास वीसी ++ डीएलएल के स्रोत तक कोई पहुंच नहीं है, मुझे बस उनका उपयोग करना होगा।WinSxS वीसी ++ डीएलएल

मैंने एक .NET परीक्षण प्रोजेक्ट बनाया है और सी ++/सीएलआई डीएलएल का संदर्भ दिया है। कोई समस्या नहीं, संकलक भाग्यशाली, महान है। केवल एक समस्या है: जब मैं .NET प्रोग्राम का EXE प्रारंभ करता हूं, तो मुझे वीसी ++ कोर डीएलएल गायब होने की वजह से सी ++ डीएलएल के बारे में त्रुटियां मिलती हैं।

INFO: Reference: Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195" 
INFO: Reference: Microsoft.VC80.OpenMP,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195" 
INFO: Resolving reference Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195" 
... 
ERROR: Cannot resolve reference Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195". 

अब मैं कोई मूर्ख हूँ और कई चीजें करने की कोशिश की: sxstrace निम्नलिखित (छोटा) दिखाता है। मैंने क्या चल रहा है इसके बारे में गहरी समझ प्राप्त करने के लिए WinSxS के बारे में बहुत कुछ पढ़ा है। अब मैं उस बिंदु पर हूं, जहां यह मेरे लिए कमजोर हो रहा है। सिस्टम जहां मैं प्रोग्राम को निष्पादित करना चाहता हूं, वर्तमान संस्करण 8.0.50727.762 (SP1) में VC++ पुनर्वितरण योग्य पैकेज स्थापित है। मुझे पता है कि winsxs में Microsoft.VC80.CRT के लिए एक नीति फ़ाइल है जो इस असेंबली के सभी संस्करणों को वर्तमान संस्करण 8.0.50727.762 पर रीडायरेक्ट करती है (यह समस्या http://blogs.msdn.com/b/nikolad/archive/2007/03/29/a-solution-to-two-references-to-different-versions-of-crt-mfc-atl-in-one-application-manifest-file.aspx पर समस्या का समाधान है)। लेकिन ऊपर की त्रुटि के अनुसार, यह नीति फ़ाइल काम नहीं कर रही है या खाते में नहीं लिया गया है। सिस्टम सिर्फ असेंबली के 8.0.50727.6195 संस्करण को ढूंढना चाहता है।

अब यह पहला सवाल है: यहां समस्या क्या है? मुझे यह पता चला कि, मैं प्रारंभिक समस्या को हल कर सकता हूं ...

+0

संस्करण बेमेल क्रिस्टल संदेश में स्पष्ट है। यह 8.0.50727.6195 चाहता है, आपको 8.0.50727.762 मिल गया है। Search.microsoft.com पर जाएं और खोज बॉक्स में "8.0.50727.6195" डालें। –

+0

सवाल यह है कि एप्लिकेशन को 6195 के बजाय 762 स्वीकार करने के लिए "राजी" करना संभव है। – Dialecticus

+0

मुझे इस मामले में माइक्रोसॉफ्ट द्वारा संस्करण के बारे में अनिश्चितता है। मुझे माइक्रोसॉफ्ट डाउनलोड पर संस्करण 8.0.50727.6195 के साथ वीसी ++ 2005 रेडिस्ट पैकेज नहीं मिला, वर्तमान वीसी ++ 2005 रेडिस्ट पैकेज संस्करण 8.0.50727.762 में आता है। यदि 762 6195 से अधिक संस्करण के अनुसार है, तो यह लिखा जाना चाहिए: WinSxS नीति फ़ाइल को 6195 से 762 पर रीडायरेक्ट करना चाहिए - लेकिन ऐसा नहीं है। – Matthias

उत्तर

8

ठीक है, अब यह काम करता है - आपकी मदद के लिए धन्यवाद।

मैं दो समस्याओं का हल किया जा सकता था पता लगा:

1) मैं "माइक्रोसॉफ्ट विजुअल C++ 2005 सर्विस पैक 1 पुनर्वितरण पैकेज MFC सुरक्षा अपडेट" है, जो कुलपति के संस्करण 8.0.50727.6195 तैनात स्थापित करने के लिए किया था ++ विधानसभाओं। यह अद्यतन माइक्रोसॉफ्ट सर्वर पर खोजना मुश्किल था, इसलिए यहां लिंक है: http://www.microsoft.com/download/en/details.aspx?id=26347 आम तौर पर आपको केवल 8.0.50727.762 संस्करण ("विजुअल सी ++ 2005 सर्विस पैक 1 पुनर्वितरण योग्य पैकेज) मिलता है, जो पुराना है। चूंकि सी ++ डीएलएल को संकलित किया गया था 6195 अपडेट स्थापित पहली समस्या हल हो।

2) C++/CLI DLL रिलीज मोड में संकलित किया गया है, देशी सी ++ DLLs नीचे डीबग मोड में वितरण किया गया था। अब माइक्रोसॉफ्ट लाइसेंस समझौते कुलपति की तैनाती पर प्रतिबंध लगाता है ++ डीबग DLLs और कुलपति ++ Redist संकुल कुलपति ++ डिबग DLLs शामिल नहीं हैं http://msdn.microsoft.com/en-us/library/aa985618.aspx का कहना है:।

एक की

डीबग संस्करण एप्लिकेशन पुनर्वितरण योग्य नहीं है और विभिन्न दृश्य C++ गतिशील-लिंक पुस्तकालयों (डीएलएल) के डीबग संस्करणों में से कोई भी पुनर्वितरण योग्य नहीं है।

समाधान: देशी सी ++ DLLs के डेवलपर्स मुझे एक रिलीज़ संस्करण दिया और सब कुछ ठीक काम करता है ...

+0

भविष्य की पीढ़ियों के लिए नोट: चरण 1) ने हल किया "मेरा आवेदन शुरू करने में विफल रहा है क्योंकि इसकी साइड-बाय-साइड कॉन्फ़िगरेशन गलत है" मूल प्रश्न से संबंधित त्रुटि। अन्य सुझावों के साथ भी काम कर सकते हैं, जब अन्य सुझाव विफल हो जाते हैं। – shinjin

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