当未引用的程序集中存在该类型时,GetType()将返回null 。例如,当调用以下内容时,“localType”始终为null(即使使用类的完整命名空间名称):
Type localType = Type.GetType("NamespaceX.ProjectX.ClassX");
我没有看到为什么Type.GetType不能从未引用的程序集中检索类型的原因,所以
答案 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方法。不可否认,从文档中可以看出,如果问题是在加载程序集时它应该抛出异常。