Saya mengalami kesalahan ini dalam konteks di mana saya menggunakan Autofac dan banyak pemuatan perakitan dinamis.
Saat melakukan operasi resolusi Autofac, runtime akan gagal memuat salah satu rakitan. Pesan kesalahan mengeluhkan itu Method 'MyMethod' in type 'MyType' from assembly 'ImplementationAssembly' does not have an implementation
. Gejala terjadi ketika berjalan pada Windows Server 2012 R2 VM, tetapi tidak terjadi pada Windows 10 atau Windows Server 2016 VM.
ImplementationAssembly
direferensikan System.Collections.Immutable
1.1.37, dan berisi implementasi IMyInterface<T1,T2>
antarmuka, yang didefinisikan secara terpisah DefinitionAssembly
. DefinitionAssembly
direferensikanSystem.Collections.Immutable
1.1.36.
Metode IMyInterface<T1,T2>
yang "tidak diterapkan" memiliki parameter tipe IImmutableDictionary<TKey, TRow>
, yang didefinisikan dalam System.Collections.Immutable
.
Salinan aktual yang System.Collections.Immutable
ditemukan di direktori program adalah versi 1.1.37. Pada VM Windows Server 2012 R2 saya, GAC berisi salinan System.Collections.Immutable
1.1.36. Pada Windows 10 dan Windows Server 2016, GAC berisi salinan System.Collections.Immutable
1.1.37. Kesalahan pemuatan hanya terjadi ketika GAC berisi versi DLL yang lebih lama.
Jadi, akar penyebab kegagalan beban perakitan adalah referensi yang tidak cocok System.Collections.Immutable
. Definisi antarmuka dan implementasi memiliki tanda tangan metode yang tampak identik, tetapi sebenarnya tergantung pada versi yang berbeda System.Collections.Immutable
, yang berarti bahwa runtime tidak mempertimbangkan kelas implementasi untuk mencocokkan definisi antarmuka.
Menambahkan pengalihan ikatan berikut ke file konfigurasi aplikasi saya memperbaiki masalah:
<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>