2010-09-21 70 views
1

我想获取程序集的信息(程序集,方法和属性中的类)。 程序集的名称将通过文本框输入。运行时的.NET程序集信息

对于这个我不喜欢

Assembly ass = Assembly.Load("System.Web") 

,但我以前不工作。

Sombody有这个解决方案吗?

+0

Vinay:我没有解决我的目的 – munish 2010-09-21 07:19:13

回答

4

Assembly.Load(string name)需要长形式的assemblyname。在你的情况,这大概就像
Assembly.Load("System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");

您还可以使用Assembly.LoadFrom(string name)超负荷使用的文件名(如System.Web.dll中)或完整路径,但是这被认为是不太安全比使用长型这个名字,因为你可能会在不知道它的情况下加载一个错误版本的程序集。

考虑阅读this article关于装配加载的最佳实践,了解更多关于为什么需要仔细使用LoadFrom过载的背景知识。

下一步将在您的程序集(ass.GetTypes();)上调用GetTypes(),并遍历返回的类型数组以获取更多信息,如方法和属性。

+0

但在我的情况下,用户将在文本框中输入程序集的名字,所以 – munish 2010-09-21 08:13:18

+0

我需要类似用户的东西将输入“System.Text”不完整的信息像版本以及所有 – munish 2010-09-21 08:14:47

+0

@mun - System.Text是名称空间名称,而不是程序集名称。目前还不清楚用户需要哪一个。 .NET 1.0,1.1,2.0,4.0,Compact Edition,Silverlight版本,Mono版本等。你需要考虑这一点。看看Reflector如何做到这一点。或者只是使用反射器。 – 2010-09-21 09:11:34

1

使用完全限定的程序集名称调用Assembly.Load()的另一种选择可能是简单地获取您可能已经加载的程序集的程序集信息,无论是显式还是因为您已经使用其中定义的类型。

只需使用你已经在使用一种类型的启动(可以说Namespace.X),并获得该类型是在像这样定义的组件:

Assembly ass = typeof(Namespace.X).Assembly; 

或者干脆问一个对象的实例有关装配它已经确定:

object x = new Namespace.X(); 
Assembly ass = obj.GetType().Assembly; 

还有对皮肤有CA ...呃...去的Assembly参考的方法不止一种。 ;-)