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

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

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

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

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

使用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"); 

从MSDN文档

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

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

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