我想获得程序集的信息(程序集,方法和属性中的类)。 装配的名称将通过文本框输入。
为此,我确实喜欢
Assembly ass = Assembly.Load("System.Web")
但它没有用。
Sombody有解决方案吗?
答案 0 :(得分:4)
Assembly.Load(string name)
需要长形式的程序集名称。在你的情况下,这可能是像
Assembly.Load("System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
您还可以使用Assembly.LoadFrom(string name)
重载文件名(如System.Web.dll)或完整路径,但这被认为不如使用长名称形式安全,因为您可以加载错误版本的程序集不知道它。
请考虑阅读this article关于装配加载的最佳做法,以获取有关为何需要仔细使用LoadFrom过载的更多背景知识。
下一步是在程序集(GetTypes()
)上调用ass.GetTypes();
,并迭代返回的类型数组,以获取更多信息,如方法和属性。
答案 1 :(得分:1)
使用完全限定的程序集名称调用Assembly.Load()
的另一个选择可能是简单地获取您可能已经加载的程序集的程序集信息,无论是显式还是因为您已经在使用它们中定义的类型。 / p>
只需从您已经使用的类型开始(比如说Namespace.X
),然后进入程序集,类型定义如下:
Assembly ass = typeof(Namespace.X).Assembly;
或者只是询问一个对象的实例,该实例是关于已定义的程序集的:
object x = new Namespace.X();
Assembly ass = obj.GetType().Assembly;
有一种方法可以让你获得Assembly
参考。 ; - )
答案 2 :(得分:0)
您需要完整assembly qualified name。