从.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中获取派生类型

从.net dll读取派生类型

将其更改为:

Type submitOfferType = 
    processorAssembly.GetType("NamespaceOfProcessLibrary.ClassA");

Assembly.GetType需要类的全名

您应该使用Assembly.LoadAssembly.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();

检查调试器中"类型"的名称以获得真实名称。