【问题标题】:Get type of an assembly loaded in a new AppDomain获取在新 AppDomain 中加载的程序集的类型
【发布时间】:2011-12-26 17:21:25
【问题描述】:

我正在使用this method to create the object I want to

对象的构造函数调用成功。

现在,我想通过反射调用一个方法,但我发现,我需要知道类型。当我做类似的事情时

Type type = Type.GetType(this.typeName);

type 为空。

所以,我需要知道的是:如何获取加载到新 AppDomain 中的程序集类型?

【问题讨论】:

  • Type.GetType() 需要一个完全限定的类型名称,它包含程序集名称和类型名称。您可能想使用 Assembly.GetType() 代替,从问题中不太清楚。
  • 没错,但是,我没有Assembly 对象。无处:/

标签: c# reflection appdomain


【解决方案1】:

您需要使用完整的程序集限定名称,因此您可以使用 Type.GetType() 重新创建它

this.typeName = typeof(MyClass).AssemblyQualifiedName;

如果没有这个,执行程序集将搜索不总是包含您的类型的类型。

【讨论】:

  • 我明白了,但我的“MyClass”在另一个项目中,因此无法找到。
  • 如果程序集已加载,则无法检索其全名,我只是不知道您尝试获取this.typeName 字段的方式。你能发布更多代码吗?
  • 第 61 行:您可以使用 Type type = this.o.GetType();
  • 我试过了,但这给了我“System.MarshalByRefObject”,而不是我需要知道的。
  • this.typename 的值是多少?是 Type.Name 还是 Type.FullName?示例:System.StringString?如果是全名,则可以用Type type = Type.GetType(String.Format("{0}, {1}", this.typeName, this.assemblyName));构造全限定名
【解决方案2】:

System.type 类型对象本身就是一个对象,其中有一个类型对象指针成员,它的成员引用自身,因为 System.Type 类型对象本身就是一个类型对象的“实例”。 System.Object 的 GetType 方法返回存储在指定对象的类型对象指针成员中的地址。换句话说,GetType 方法返回一个指向对象类型对象的指针,这就是您可以确定系统中任何对象的真实类型的方法。

使用 System.Reflection.AssemblyName 是一个实用程序类,它为您提供程序集唯一标识的完整详细信息。使用该类的GetType 方法可以知道加载的Assembly 的类型。

http://msdn.microsoft.com/en-us/library/system.object.gettype.aspx

【讨论】:

  • 但是这个例子只向我展示了如何接收类型,如果现有的类在我的环境中,但它不是):
  • 在这种情况下,您需要通过在 Appdomain 中引用它来加载程序集。加载程序集并提取清单。清单维护程序集中所有类的内部结构。因此,通过在清单文件中阅读该程序集的内部结构,您将了解该程序集支持的接口、类和类型。
【解决方案3】:

这是我解决问题的方法: 我创建了一个接口,并使用 typeof(MyInterface) 来工作。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 2018-03-05
    相关资源
    最近更新 更多