2017-03-08 5 views
17

का उपयोग करते समय मैं कुछ समय के लिए वीएस 2015 और एफ # 4.0 (4.4.0.0) में विकास कर रहा हूं।असेंबली FSharp.Core 4.4.1.0 पर निर्भरता को हल नहीं कर सकता है जब वीएस 2017

वीएस 2017 के रिलीज के साथ, मैं विकास कार्य के लिए नवीनतम वीएस में समाधान खोलना चाहता हूं, लेकिन अभी भी कुछ समय के लिए परियोजनाओं को वीएस 2015, एफ # 4.0, .NET 4.5.2 के रूप में रखना है। बिल्ड सर्वर को थोड़ी देर के लिए वीएस 2015 का भी उपयोग करना होगा।

जहां तक ​​मुझे याद है, इस तरह का परिदृश्य पहले वीएस संस्करण उन्नयन में समस्याग्रस्त नहीं रहा है, लेकिन तब मुझे नहीं लगता कि मैंने उस समय एफ # का उपयोग किया था।

मैंने समाधान खोला और संकलन करने की कोशिश की। मुझे यह त्रुटि एक सी # अनुप्रयोग प्रोजेक्ट में मिलती है। , (वहाँ अन्य सी # अनुप्रयोगों रहे हैं, और कम से कम एक का संदर्भ एक एफ # पुस्तकालय।)

अज्ञात निर्माण त्रुटि 'विधानसभा के लिए निर्भरता को हल नहीं किया जा सकता' FSharp.Core, संस्करण = 4.4.1.0, संस्कृति = तटस्थ, PublicKeyToken = b03f5f7f11d50a3a 'क्योंकि इसे प्रीलोड नहीं किया गया है। प्रतिबिंबऑनली एपीआई का उपयोग करते समय, निर्भर असेंबली को प्रतिबिंबित किया जाना चाहिए या प्रतिबिंबऑनलीएस्प्लर रिसेल्व घटना के माध्यम से मांग पर लोड होना चाहिए।

समाधान में मेरी सभी एफ # परियोजनाएं 4.0 (4.4.0.0) हैं। मैंने दो बार चेक किया।

ऐसा क्यों हो रहा है?

उत्तर

16

मैंने "4.4.1.0" की खोज की, और पाया कि सी # प्रोजेक्ट के "obj" फ़ोल्डर में एक .exe.config फ़ाइल थी जो app.config से भिन्न थी। यह अतिरिक्त जानकारी थी जो परियोजना के app.config में नहीं है।

<runtime> 
... 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-4.4.1.0" newVersion="4.4.1.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 

यह स्वचालित रूप से क्यों जोड़ा जाता है, और केवल इस विशेष सी # प्रोजेक्ट में क्यों?

मैंने उस अनुभाग को प्रोजेक्ट के app.config पर कॉपी करने का प्रयास किया, और इसे दोनों स्थानों पर 4.4.0.0 में बदल दिया, लेकिन यह काम नहीं किया। पुराने संस्करण की ऊपरी सीमा के रूप में "4.4.1.0" का उपयोग करने की भी कोशिश की, और "4.4.0.0" नया संस्करण के रूप में है, लेकिन अभी भी काम नहीं किया है। समान संकलक त्रुटि।

फिर मैंने उस अनुभाग को हटा दिया, और मैंने सी # प्रोजेक्ट में FSharp.Core 4.4.0.0 का संदर्भ दिया। अंततः संकलन त्रुटि से छुटकारा पा लिया।

मैंने कार्यक्रम चलाया। यह इस अपवाद के साथ दुर्घटनाग्रस्त हो गया।

क्रिया के अपवाद: लोड नहीं कर सका फ़ाइल या विधानसभा 'FSharp.Core, संस्करण = 4.4.1.0, संस्कृति = तटस्थ, PublicKeyToken = b03f5f7f11d50a3a' या अपनी निर्भरता में से एक। स्थित असेंबली की स्पष्ट परिभाषा असेंबली संदर्भ से मेल नहीं खाती है। (HRESULT से अपवाद: 0x80131040)

मैंने रीडायरेक्ट के साथ अनुभाग को दोबारा डाला, और अब कार्यक्रम ठीक चलाता है।

बस योग करने के लिए, मैं FSharp.Core 4.0 के लिए एक संदर्भ जोड़ा, और रीडायरेक्ट इस

<bindingRedirect oldVersion="0.0.0.0-4.4.1.0" newVersion="4.4.0.0" /> 
इन संशोधनों के साथ

तरह लग रहा है, के रूप में वी.एस. 2015 में

+0

उपरोक्त समस्या एक सी # प्रोग्राम में थी जो एफ # पुस्तकालयों का उपयोग करती थी। आज मुझे वीएस 2017 में एफ # 4.0.0.0 का उपयोग कर एफ # प्रोग्राम के साथ एक ही समस्या थी। कोई संकलन त्रुटि नहीं थी, केवल ऊपर की रनटाइम त्रुटि थी। जैसा कि यहां बताया गया है, मैंने बाध्यकारी रेडियोधर्मी का उपयोग करके इसे हल किया। मुझे समझ में नहीं आता कि यह मेरे कुछ कार्यक्रमों के लिए क्यों होता है। –

+1

लगता है कि मैं इसके साथ डिबगिंग के दौरान अभिव्यक्तियों का निरीक्षण करने में असमर्थ हूं। एक घड़ी जोड़ना त्रुटि दिखाता है: त्रुटि CS1705: पहचान 'एक्स' के साथ असेंबली 'एक्स' 'FSharp.Core, संस्करण = 4.4.1.0, संस्कृति = तटस्थ, PublicKeyToken = b03f5f7f11d50a3a' का संदर्भ देता है जिसमें संदर्भित असेंबली 'FSharp से उच्च संस्करण है। कोर 'पहचान' FSharp.Core, संस्करण = 4.4.0.0, संस्कृति = तटस्थ, PublicKeyToken = b03f5f7f11d50a3a ' – Nuzzolilo

+0

बहुत बढ़िया! यह मेरे लिए एक आकर्षण की तरह काम किया। धन्यवाद! –

-2
भी उम्मीद समाधान अभी भी काम करता है

संदेश में असेंबली के असेंबली संदर्भों की जांच करें। मेरे लिए मेरे पास असेंबली एक्स का संदर्भ था जिसमें वाई का संदर्भ था क्योंकि वाई गायब था, मुझे यह त्रुटि मिली। वाई संदर्भित करके, त्रुटि मेरे लिए हल की गई थी।

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