ฉันพบข้อผิดพลาดนี้ในบริบทที่ฉันใช้ 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.Immutable1.1.37 และมีการใช้งานของอินเตอร์เฟซซึ่งถูกกำหนดไว้ในการแยกIMyInterface<T1,T2> อ้างอิง1.1.36DefinitionAssemblyDefinitionAssemblySystem.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.Immutable1.1.36 ใน Windows 10 และ Windows Server 2016 GAC มีสำเนาของSystem.Collections.Immutable1.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>