从.net dll读取派生类型
本文关键字:派生 类型 读取 dll net | 更新日期: 2023-09-27 17:59:01
演示:我的项目中有两个类库。1) 行动2)过程。
我的操作库包含接口IProcessor和方法Process
在我的流程库中,我有3个类
A)ClassA:I处理器
B) ClassB:I处理器
C) C类:I处理器
其实现IP处理器接口。
当我试图阅读Process Library的程序集时,我没有对任何类型的ClassA、ClassB和ClassC 进行微调
我使用
Assembly processorAssembly = Assembly.LoadFile(process.dll);
Type submitOfferType = processorAssembly.GetType("Namespace.ClassA");
无法从程序集中读取类型。
如何从dll中获取派生类型
将其更改为:
Type submitOfferType =
processorAssembly.GetType("NamespaceOfProcessLibrary.ClassA");
Assembly.GetType需要类的全名。
您应该使用Assembly.Load
或Assembly.LoadFrom
而不是Assembly.LoadFile
。试试这个:
Assembly processorAssembly = Assembly.Load(AssemblyName.GetAssemblyName("[...]process.dll"));
Type submitOfferType = processorAssembly.GetType("Namespace.ClassA");
Assembly.LoadFile
不会尝试解析与您使用LoadFile
加载的文件相关的依赖关系,因此它甚至不会尝试解析您的操作库。从表面上看,它将解决由于依赖关系而无法加载类型的问题,只需忽略它们。
Assembly.GetType
需要类型的全名。这意味着您必须包含命名空间。
尝试找到"ClassA"的确切全名:
Assembly processorAssembly = Assembly.LoadFile(process.dll);
var types= processorAssembly.GetTypes();
检查调试器中"类型"的名称以获得真实名称。