这是对上一个问题Is it possible to switch DLLs at runtime so as to use a different version?的跟进。
自发布该问题以来,我重组了我的项目,但仍然存在DLL加载问题。
我有3个主要项目:应用程序,包含MEF插件的库和包含更多MEF插件的第二个库。每个插件都处理一种IO设备。
其中一个设备的制造商生产了一组新的同名但不兼容的DLL。我现在有2个插件来处理每个版本并将它们放在2个独立的项目中(MEF Lib1和MEF Lib2)。
MEF加载程序决定加载哪个冲突插件(只需要一个),并告诉插件初始化自己。然后它复制它的'在访问DLL之前,DLL(托管和非托管)到执行文件夹。
这不能按预期工作。 托管 DLL是正确的,但实际加载的非托管 DLL是旧版本。
我尝试过使用AppDomain.AssemblyResolve
事件,但只有在无法找到DLL时才会激活此事件。在我的情况下,总是找到DLL - 而不是我想要的那个。
我做错了什么?