2010-09-21 124 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參考的方法不止一種。 ;-)