2017-08-15 14 views
15

मुझे अपने एप्लिकेशन में एक एपीआई के रूप में एक डीएलएल का उपयोग करना है (सी #, .NET 4.5)। मैं डीएलएल normaly का संदर्भ कर सकते हैं। कोई त्रुटि नहीं लेकिन अगर मैं इस DLL के किसी भी वर्ग का उपयोग करना चाहते हैं, मैं निम्नलिखित संकलन त्रुटि मिलती है:टूटी हुई संदर्भों के साथ .net DLL का उपयोग करें

Error CS1705 Assembly 'Assembly_X' with identity 'Assembly_X, Version=12.3.0.0, Culture=neutral, PublicKeyToken=c878e80841e75d00' uses 'Assembly_YY, Version=65535.65535.65535.65535, Culture=neutral, PublicKeyToken=c878e80841e75d00' which has a higher version than referenced assembly 'Assembly_YY' with identity 'Assembly_YY, Version=12.3.0.0, Culture=neutral, PublicKeyToken=c878e80841e75d00'

तब मैं ILSpy में DLL (Assembly_X) की जाँच की। Assembly_एक्स में असेंबली_वाईवाई के दो संदर्भ हैं: संस्करण 12.3.0.0 के साथ एक और संस्करण 65535.65535.65535.65535 संस्करण वाला एक है।

मैंने App.config में "बाइंडिंग रीडायरेक्ट" की कोशिश की। लेकिन चूंकि त्रुटि संकलन समय के दौरान होती है, इससे मदद नहीं मिलती है।

मेरे पास Assembly_एक्स या असेंबली_वाईवाई का स्रोत कोड नहीं है।

मैं इस डीएलएल का उपयोग कैसे कर सकता हूं या इसकी मरम्मत कैसे कर सकता हूं?


अद्यतन

dll के डेवलपर्स अंत में मदद के लिए मेरे फोन का जवाब। वे जानते हैं कि उनके आसपास एकमात्र काम विजुअल स्टूडियो 2015 या 2017 के बजाय विजुअल स्टूडियो 2013 का उपयोग करना है। ऐसा लगता है कि वीएस 2013 इन दोहरे संदर्भों से परेशान नहीं है।

वे लिखते हैं, कि त्रुटि डीएल के लिए एन्क्रिप्टिंग टूल द्वारा बनाई गई है। आपके विचारों और सहायता के लिए सभी को धन्यवाद।

+0

क्या आप वास्तविक मूल्यों के साथ एक्स और वाई अपडेट कर सकते हैं? यह हमें आपकी मदद करने में सक्षम करेगा। – mjwills

+0

ये किसी अन्य कंपनी से डीएलएल हैं और मैं डीएलएल के नाम पोस्ट नहीं कर सकता। आप डीएलएल नहीं जान पाएंगे, क्योंकि दुनिया में केवल कुछ लोग ही उनके साथ काम कर रहे हैं। – Marius

+2

चूंकि पीबीके वही है, इसलिए आप अपने असेंबली_वायवाई के संस्करण को [immerge का उपयोग करके] (https://stackoverflow.com/a/837536/937093) का प्रयास और नकली कर सकते हैं। यह सुनिश्चित करने से पहले सुनिश्चित करें कि आपके पास Assembly_वाईवाई की बैकअप/प्रति है। यदि यह काम नहीं करता है तो आप इसे [कठिन तरीके से आजमा सकते हैं] (https://stackoverflow.com/a/34045871/937093) –

उत्तर

2

समस्या मूल रूप से आप 'असेंबली_एक्स' का संदर्भ दे रहे हैं जो असेंबली 'असेंबली_वायवाई' संस्करणों का संदर्भ 12.3.0.0 और 65535.65535.65535.65535 संदर्भित करती है और आपने अपने आवेदन में केवल 'Assembly_वायवाई' संस्करण 12.3.0.0 का संदर्भ दिया और 65535.65535.65535.65535 का संदर्भ नहीं दिया

अब Microsoft Docs पर समस्या विवरण, और अपने उदाहरण है जो आप विधानसभाओं आप के लिए है के लिए स्रोत कोड की जरूरत नहीं है के अनुसार:

DLL की 'Assembly_YY' संस्करण 65535.65535.65535.65535 के लिए एक संदर्भ जोड़ें अपने एप्लिकेशन को संकलित करने और एप्लिकेशन को चलाने में सक्षम करने के लिए, आप एक एप्लिकेशन कॉन्फ़िगरेशन फ़ाइल प्रदान कर सकते हैं I <dependentAssembly> तत्व को शामिल करता है जो DL12 के संस्करण 12.3.0.0 के स्थान को निर्दिष्ट करने के लिए <assemblyIdentity> और <codeBase> बाल तत्वों का उपयोग करता है।

+0

इस विचार के लिए धन्यवाद। मेरे पास यह विधानसभा_वाईवाई संस्करण 65535.65535.65535.65535 नहीं है। मुझे लगता है कि यह अस्तित्व में नहीं है (इस उत्पाद की सभी अन्य असेंबली में "सार्थक" संस्करण हैं)। क्या मैं किसी भी तरह विधानसभा_वाईवाई को डुप्लिकेट कर सकता हूं और संस्करण को 65535.65535.65535.65535 में बदल सकता हूं? – Marius

+1

@ मैरियस यदि लाइब्रेरी इतना बड़ा नहीं है, तो आप स्रोत प्राप्त कर सकते हैं (रेडगेट .नेट रिफ्लेक्टर, टेलरिक जस्ट डीकंपाइल) और इसे पुन: संकलित करने का प्रयास करें, अगर केवल – Spawn

+0

प्रयास के लायक है तो यह प्रयास के लायक है। मैं कोशिश करूँगा (उह, इससे पहले कभी ऐसा कुछ नहीं किया, यह सबसे दिलचस्प होगा) – Marius

3

ऐसा लगता है कि पहला डीएलएल लाइब्रेरी का संदर्भ दे रहा है जो आपके द्वारा उपयोग किए जा रहे अन्य डीएलएल की तुलना में एक उच्च संस्करण है।

ताकि आप 3 DLL का विचार करने के लिए है: ए, बी & Bv2

आपका परियोजना संदर्भित कर रहा है एक & बी लेकिन एक संदर्भ Bv2 (बी के एक अद्यतन संस्करण) तो जब आप एक के कार्यों का उपयोग करने के लिए जाना यह एक त्रुटि फेंकता है क्योंकि यह बीवी 2 के बजाय बी पाता है।

+1

मेरे पास बीवी 2 नहीं है। मुझे लगता है कि यह अस्तित्व में नहीं था, क्योंकि संस्करण संख्या अजीब है। – Marius

+0

हाँ यह थोड़ा अजीब है। हो सकता है कि उन्होंने ए का एक पुनर्मूल्यांकन किया जब उन्होंने थोड़ा बी बदल दिया और यह बीवी 2 बना। लेकिन यह एक अजीब रेफरी है। यह 16 बिट पूर्णांक की सीमा है। मैं उन लोगों से संपर्क करूंगा जिन्होंने डीएलएल बनाया और उन्हें उस संस्करण की जांच करने के लिए प्राप्त किया। – Slipoch

0

आप वर्तमान में डीएलएल के उच्च संस्करण का संदर्भ दे रहे हैं।

'Assembly_YY, Version=65535.65535.65535.65535, Culture=neutral, PublicKeyToken=c878e80841e75d00' 

क्रम में इस को हल करने के: आप उच्च संस्करण विधानसभा के संदर्भ में जोड़ने की आवश्यकता होगी।

अभी आप

'Assembly_X' with identity 'Assembly_X, Version=12.3.0.0, Culture=neutral, PublicKeyToken=c878e80841e75d0 

संदर्भित कर रहे हैं इस एक डाउनलोड पुस्तकालय है, तो nuget पैकेज प्रबंधक में उसकी खोज करें और इसे डाउनलोड। यदि यह आपके द्वारा लिखी गई लाइब्रेरी है, तो लाइब्रेरी का नवीनतम संस्करण प्राप्त करें और इसे अपनी प्रोजेक्ट में जोड़ें।

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