我有一个可执行文件,我希望能够独立共享,而无需确保依赖DLL被复制。为此,我使用this one之类的答案将DLL作为资源文件嵌入到可执行文件中。到目前为止,它一直很顺利,我能够正确访问DLL中的接口 - 称为InterfaceA。该应用程序还用于加载在运行时指定的第三方DLL,其中包含实现InterfaceA的类。我使用反射来查找实现InterfaceA的类型,并使用Activator.CreateInstance
来创建实例。
问题在于,当我迭代第三方DLL中的可用类型时,typeof(InterfaceA).IsAssignableFrom(thirdPartyType)
总是返回false。但是,当我的DLL是常规引用并且不作为资源嵌入时,情况并非如此。似乎只是因为DLL作为资源嵌入,InterfaceA被视为不同的类型。但是,thirdPartyType.GetInterface(typeof(InterfaceA).FullName)
始终返回看似正确的接口类型。
如何加载嵌入式DLL以便InterfaceA不被视为其他类型,或者将其与第三方类型一起使用,以便IsAssignableFrom
和CreateInstance
都正常工作?
答案 0 :(得分:0)
我认为您遇到的问题是嵌入和引用程序集之间的程序集标识差异。 检查版本。您确定第三方程序集是针对包含您从资源加载的InterfaceA的相同版本的程序集构建的吗?
编辑:基于评论中的讨论,问题可能在于使用LoadFrom()
。使用LoadFile(string path)
,我能够成功执行问题中描述的场景。