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

3

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

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

我认为Type.GetType应该可以从未引用的程序集中检索类型,因此

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


如果使用Load,您不需要.dll文件,只需要名称即可... - user779175
2个回答

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

我认为Load在这里遵循规则... https://dev59.com/nHVD5IYBdhLWcg3wNY1Z - Anthony Mastrean

1

MSDN文档中

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

它还指出,如果程序集未从磁盘加载,则将返回null。

一个可能尝试的解决方法是先加载程序集,然后直接在程序集上使用GetType方法。诚然,根据文档的描述,如果问题是在加载程序集时发生的,它应该会抛出异常。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接