如何獲取當前正在執行的程序集中或未在mscorlib.dll
中定義的類型的Type
類的實例?無法獲得當前正在執行的程序集中未定義的類型的Type類的實例
一)也就是說,我在組裝CSharpSnapIn.dll
,位於E:\CSharpSnapIn.dll
定義的類類型someType
,但由於某些原因,當我嘗試指定此程序集的絕對路徑,我得到一個異常:
Type t = Type.GetType("someType, E:\\CSharpSnapIn.dll"); // exeception
二)我也通過把CSharpSnapIn.dll
到\bin\debug
目錄中當前運行的應用的嘗試,但我仍然得到一個異常:
Type t = Type.GetType("someType, CSharpSnapIn.dll"); // exeception
感謝名單
編輯:
1)我已經聲明另一個類類型someType2
(內CsharpSnapIn.dll
),這一次它的工作:
Type.GetType("someType2, CSharpSnapIn");
差異與someType2
之間someType
是someType
實現一個接口在外部程序集asmIn
中聲明,但是這不應該引起異常,因爲CsharpSnapIn.dll
確實對asmIn
有參考?!
2)
需要注意的是,大會並不需要 首先裝載,只要 集解析器可以找到它
換句話說,調用Type.GetType()
首次加載一個程序集,然後創建一個Type
實例?
3)
大會有權通過 探測發現,所以它必須是在 bin目錄按你的第二個 例子。如果它是具有 強名稱的組件,則必須提供所有 的詳細信息。
所以你說我們不能指定使用Type.GetType()
絕對路徑(一個組裝),而是裝配需要駐留在bin
目錄裏面?
你可以看到編輯在原來的職位? – flockofcode 2010-07-18 19:16:40
我很確定,如果你使用Type.GetType(assemblyAualifiedName),你可以傳遞程序集名稱 – 2010-07-18 20:16:09
@Rune FS的絕對文件路徑,我非常肯定你不能。正如@Jon所說,要使Type.GetType工作,程序集需要通過CLR使用的標準探測啓發式來解析(例如,如果程序集位於ASP.NET應用程序的'bin'文件夾中或與控制檯和WinForms應用程序的可執行文件相同的文件夾)。 – 2010-07-18 20:50:13