Tôi đã gặp lỗi này trong bối cảnh tôi đang sử dụng Autofac và rất nhiều tải lắp ráp động.
Trong khi thực hiện thao tác phân giải Autofac, bộ thực thi sẽ không tải được một trong các cụm. Thông báo lỗi phàn nàn rằng Method 'MyMethod' in type 'MyType' from assembly 'ImplementationAssembly' does not have an implementation
. Các triệu chứng xảy ra khi chạy trên máy chủ Windows Server 2012 R2, nhưng không xảy ra trên máy ảo Windows 10 hoặc Windows Server 2016.
ImplementationAssembly
đã tham chiếu System.Collections.Immutable
1.1.37 và chứa các triển khai của IMyInterface<T1,T2>
giao diện, được xác định riêng biệt DefinitionAssembly
. DefinitionAssembly
tham chiếu System.Collections.Immutable
1.1.36.
Các phương thức IMyInterface<T1,T2>
mà "không được thực hiện" có các tham số kiểu IImmutableDictionary<TKey, TRow>
, được xác định trong System.Collections.Immutable
.
Bản sao thực tế System.Collections.Immutable
được tìm thấy trong thư mục chương trình là phiên bản 1.1.37. Trên máy chủ Windows Server 2012 R2 VM của tôi, GAC chứa bản sao System.Collections.Immutable
1.1.36. Trên Windows 10 và Windows Server 2016, GAC chứa bản sao System.Collections.Immutable
1.1.37. Lỗi tải chỉ xảy ra khi GAC chứa phiên bản cũ hơn của DLL.
Vì vậy, nguyên nhân gốc rễ của lỗi tải lắp ráp là các tham chiếu không khớp System.Collections.Immutable
. Định nghĩa và triển khai giao diện có chữ ký phương thức trông giống hệt nhau, nhưng thực sự phụ thuộc vào các phiên bản khác nhau System.Collections.Immutable
, điều đó có nghĩa là thời gian chạy không xem xét lớp thực hiện để khớp với định nghĩa giao diện.
Thêm chuyển hướng ràng buộc sau vào tệp cấu hình ứng dụng của tôi đã khắc phục sự cố:
<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>