मुझे इस त्रुटि का संदर्भ एक संदर्भ में मिला जहां मैं ऑटोफैक और बहुत सारे डायनामिक असेंबली लोडिंग का उपयोग कर रहा था।
एक ऑटोफेक रिज़ॉल्यूशन ऑपरेशन करते समय, रनटाइम असेंबलियों में से एक को लोड करने में विफल होगा। त्रुटि संदेश की शिकायत की Method 'MyMethod' in type 'MyType' from assembly 'ImplementationAssembly' does not have an implementation
। लक्षण उस समय हुआ जब एक विंडोज सर्वर 2012 R2 वी एम पर चल रहा है, लेकिन किया नहीं Windows 10 या Windows Server 2016 VMs पर होते हैं।
ImplementationAssembly
संदर्भित System.Collections.Immutable
1.1.37, और इसमें एक IMyInterface<T1,T2>
इंटरफ़ेस का कार्यान्वयन शामिल था, जिसे एक अलग तरीके से परिभाषित किया गया था DefinitionAssembly
। DefinitionAssembly
संदर्भित System.Collections.Immutable
1.1.36।
जिन तरीकों से IMyInterface<T1,T2>
"लागू नहीं किया गया था" में प्रकार के पैरामीटर थे IImmutableDictionary<TKey, TRow>
, जो में परिभाषित किया गया है System.Collections.Immutable
।
System.Collections.Immutable
कार्यक्रम निर्देशिका में पाई गई वास्तविक प्रतिलिपि संस्करण 1.1.37 थी। मेरे विंडोज सर्वर 2012 R2 वीएम पर, जीएसी में System.Collections.Immutable
1.1.36 की एक प्रति शामिल थी। विंडोज 10 और विंडोज सर्वर 2016 पर, जीएसी में System.Collections.Immutable
1.1.37 की एक प्रति शामिल थी। लोडिंग त्रुटि केवल तब हुई जब GAC में DLL का पुराना संस्करण था।
इसलिए, असेंबली लोड विफलता का मूल कारण बेमेल संदर्भ थे System.Collections.Immutable
। इंटरफ़ेस की परिभाषा और कार्यान्वयन में समान दिखने वाली विधि हस्ताक्षर थे, लेकिन वास्तव में के विभिन्न संस्करणों पर निर्भर थे System.Collections.Immutable
, जिसका मतलब था कि रनटाइम इंटरफ़ेस परिभाषा से मेल खाने के लिए कार्यान्वयन वर्ग पर विचार नहीं करता था।
मेरे अनुप्रयोग कॉन्फ़िग फ़ाइल में निम्नलिखित बाइंडिंग रीडायरेक्ट को जोड़ने से समस्या ठीक हो गई:
<dependentAssembly>
<assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.1.37.0" newVersion="1.1.37.0" />
</dependentAssembly>