ฉันพบข้อผิดพลาดนี้ในบริบทที่ฉันใช้ Autofac และการโหลดแอสเซมบลีจำนวนมาก
ในขณะที่ทำการดำเนินการแก้ปัญหา Autofac รันไทม์จะไม่สามารถโหลดหนึ่งในแอสเซมบลี Method 'MyMethod' in type 'MyType' from assembly 'ImplementationAssembly' does not have an implementation
เกิดข้อผิดพลาดบ่นว่า อาการที่เกิดขึ้นเมื่อทำงานบน Windows Server 2012 R2 VM แต่ไม่ได้เกิดขึ้นใน Windows 10 หรือ Windows Server 2016 VM
ImplementationAssembly
อ้างอิงSystem.Collections.Immutable
1.1.37 และมีการใช้งานของอินเตอร์เฟซซึ่งถูกกำหนดไว้ในการแยกIMyInterface<T1,T2>
อ้างอิง1.1.36DefinitionAssembly
DefinitionAssembly
System.Collections.Immutable
วิธีการจากIMyInterface<T1,T2>
ที่ถูก "ไม่ได้ดำเนินการ" มีพารามิเตอร์ของชนิดซึ่งถูกกำหนดไว้ในIImmutableDictionary<TKey, TRow>
System.Collections.Immutable
สำเนาจริงที่System.Collections.Immutable
พบในไดเรกทอรีโปรแกรมเป็นรุ่น 1.1.37 บน Windows Server 2012 R2 VM ของฉัน GAC มีสำเนาของSystem.Collections.Immutable
1.1.36 ใน Windows 10 และ Windows Server 2016 GAC มีสำเนาของSystem.Collections.Immutable
1.1.37 ข้อผิดพลาดในการโหลดเกิดขึ้นเมื่อ GAC มี DLL รุ่นเก่ากว่าเท่านั้น
ดังนั้นสาเหตุของความล้มเหลวในการโหลดการชุมนุมเป็น mismatching System.Collections.Immutable
อ้างอิงถึง คำจำกัดความของอินเทอร์เฟซและการใช้งานมีลายเซ็นวิธีการที่เหมือนกัน แต่จริง ๆ แล้วขึ้นอยู่กับรุ่นต่าง ๆSystem.Collections.Immutable
ซึ่งหมายความว่ารันไทม์ไม่ได้พิจารณาคลาสการใช้งานให้ตรงกับคำจำกัดความของอินเทอร์เฟซ
การเพิ่มการเปลี่ยนเส้นทางการเชื่อมโยงไปยังไฟล์ config ของแอปพลิเคชันของฉันแก้ไขปัญหา:
<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>