【问题标题】:How to get a type from an unreferenced assembly?如何从未引用的程序集中获取类型?
【发布时间】:2009-01-20 21:36:50
【问题描述】:
当类型存在于未引用的程序集中时,

GetType() 返回 null。例如,以下调用时“localType”始终为空(即使使用类的完整命名空间名称):

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

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

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

【问题讨论】:

  • 在使用 Load 的情况下,您不需要 .dll 只是名称...

标签: c# .net reflection assemblies


【解决方案1】:

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

【讨论】:

【解决方案2】:

来自MSDN 文档

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

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

您可以尝试的一种解决方法是加载程序集,然后直接在程序集上使用 GetType 方法。诚然,从文档看来,如果问题在于加载程序集,它应该引发异常。

【讨论】:

    猜你喜欢
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 2011-11-06
    • 2011-08-16
    相关资源
    最近更新 更多