如何从未引用的程序集中获取类型?

时间:2009-01-20 21:36:51

标签: c# .net reflection assemblies

当未引用的程序集中存在该类型时,GetType()将返回null 。例如,当调用以下内容时,“localType”始终为null(即使使用类的完整命名空间名称):

Type localType = Type.GetType("NamespaceX.ProjectX.ClassX");

我没有看到为什么Type.GetType不能从未引用的程序集中检索类型的原因,所以

如何检索未引用的程序集的类型?

2 个答案:

答案 0 :(得分:7)

使用LoadFrom从其位置加载未引用的程序集。然后拨打GetType

Assembly assembly = Assembly.LoadFrom("c:\ProjectX\bin\release\ProjectX.dll");
Type type = assembly.GetType("NamespaceX.ProjectX.ClassX");

如果要加载的程序集位于要加载的程序集的私有路径中(例如“c:\ ProjectY \ bin \ release \ ProjectX.dll”),则可以使用Load

Assembly assembly = Assembly.Load("ProjectX.dll");
Type type = assembly.GetType("NamespaceX.ProjectX.ClassX");

答案 1 :(得分:1)

来自MSDN文档

  

如果请求的类型是非公共的并且调用者没有ReflectionPermission来反映当前程序集之外的非公共对象,则此方法返回null。

如果未从磁盘加载程序集,它还表示将返回null。

您可能尝试的一个方法是加载程序集,然后直接在程序集上使用GetType方法。不可否认,从文档中可以看出,如果问题是在加载程序集时它应该抛出异常。