从嵌入资源加载类型时,IsAssignableFrom返回false



我有一个可执行文件,我希望它能够独立共享,而不必确保复制依赖的DLL。为了实现这一点,我已经将DLL作为资源文件嵌入到可执行文件中,使用类似这样的答案。到目前为止,一切都很顺利,我能够正确地访问DLL中的接口,称之为InterfaceA。该应用程序还用于加载在运行时指定的第三方DLL,该DLL包含一个实现InterfaceA的类。我使用反射来找到一个实现InterfaceA的类型,并使用Activator.CreateInstance来创建一个实例。

问题是,当我迭代第三方DLL中的可用类型时,typeof(InterfaceA).IsAssignableFrom(thirdPartyType)总是返回false。然而,当我的DLL是一个常规引用并且没有作为资源嵌入时,情况并非如此。似乎正是因为DLL是作为资源嵌入的,所以InterfaceA被视为不同的类型。然而,thirdPartyType.GetInterface(typeof(InterfaceA).FullName)总是返回看起来正确的接口类型。

如何加载嵌入式DLL,使InterfaceA不会被视为不同的类型,或者将其与第三方类型一起使用,使IsAssignableFromCreateInstance都能正常工作?

我认为您面临的问题是嵌入和引用程序集之间的程序集标识差异。检查版本。您确定第三方程序集是根据包含从资源加载的InterfaceA的程序集的同一版本生成的吗?

编辑:根据评论中的讨论,问题可能存在于LoadFrom()的使用中。使用LoadFile(string path),我能够成功地执行问题中描述的场景。

相关内容

  • 没有找到相关文章

最新更新