Bu hatayı Autofac ve çok sayıda dinamik derleme yüklemesi kullandığım bir bağlamda karşılaştım.
Bir Autofac çözünürlük işlemi gerçekleştirilirken, çalışma zamanı montajlardan birini yükleyemez. Hata mesajı şikayet etti Method 'MyMethod' in type 'MyType' from assembly 'ImplementationAssembly' does not have an implementation
. Belirtiler bir Windows Server 2012 R2 VM'sinde çalışırken ortaya çıktı, ancak Windows 10 veya Windows Server 2016 VM'lerinde görülmedi .
ImplementationAssembly
System.Collections.Immutable
1.1.37'ye atıfta bulundu ve IMyInterface<T1,T2>
ayrı olarak tanımlanan bir arayüzün uygulamalarını içeriyordu DefinitionAssembly
. DefinitionAssembly
Başvurulan System.Collections.Immutable
1.1.36.
IMyInterface<T1,T2>
"Uygulanmayan" yöntemler, içinde IImmutableDictionary<TKey, TRow>
tanımlanmış tip parametrelerine sahipti System.Collections.Immutable
.
System.Collections.Immutable
Program dizininde bulunan asıl kopya , sürüm 1.1.37 idi. Windows Server 2012 R2 System.Collections.Immutable
VM'imde , GAC 1.1.36'nın bir kopyasını içeriyordu. Windows 10 ve Windows Server 2016'da GAC, System.Collections.Immutable
1.1.37'nin bir kopyasını içeriyordu. Yükleme hatası yalnızca GAC DLL'nin eski sürümünü içerdiğinde ortaya çıktı.
Bu nedenle, derleme yük arızasının temel nedeni, eşleşmeyen başvurulardı System.Collections.Immutable
. Arayüz tanımı ve uygulaması aynı görünümlü yöntem imzalarına sahipti, ancak aslında farklı sürümlerine bağlıydı, System.Collections.Immutable
bu da çalışma zamanının arayüz sınıfıyla eşleşmesi için uygulama sınıfını dikkate almadığı anlamına geliyordu.
Uygulama yapılandırma dosyama aşağıdaki bağlama yönlendirmesini eklemek sorunu çözdü:
<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>