2012-09-28 29 views
3

我需要枚舉某個名稱空間中的物理位於Silverlight dll中的類型。但我必須在服務器上做(asp.net應用程序)。從非加載程序集中獲取類型

我有xap文件,我可以用zip讀取它並獲取我需要的dll。

但是我想不加載該程序集在內存中(我認爲它可能無法加載,因爲它是Silverlight應用程序)也只要我記得加載的程序集不能被卸載(不想要垃圾服務器內存只是爲了得到字符串)。

任何想法?

編輯:ReflectionOnlyLoad不適用於Silverlight程序集..任何其他想法?

+0

也許這裏只是單調的措辭,但你知道命名空間和程序集不在1-1關係中,對不對? –

+0

這個問題並不意味着1-1 .. –

+0

_「加載的程序集不能被卸載」_ - 如果你已經加載了一個子程序AppDomain,它可以被卸載。 – MickyD

回答

2

你應該使用:

Assembly.ReflectionOnlyLoad(string assemblyString) 

這將在一個特殊的背景下加載程序集(不depencies)。你不能執行任何方法。您可以卸載此程序集,而無需卸載完整的AppDomain。

MSDN: Assembly.ReflectionOnlyLoad

+0

得到:無法加載文件或程序集'blabla.dll'或其依賴項之一。給定的程序集名稱或代碼庫無效。 (來自HRESULT的例外:0x80131047) –

+0

請告訴我你的代碼。 –

+0

刪除它..它有點像:string path = HttpContext.Current.Server.MapPath(「〜/ ClientBin/1/blabla.dll」); Assembly.ReflectionOnlyLoad(path); Assembly.ReflectionOnlyLoad(path); –

0

嘗試ReflectionOnlyLoad。您可以傳遞一個字符串(程序集文件的路徑)或byte [](程序集的COFF圖像 - 應該是從解壓縮程序集中得到的結果字節[]]。

+0

這是否會在Silverlight程序集中工作?正常。淨? – Yaur

0

您將需要加載它,但您需要將其加載到silverlight中,並需要使用silverlight代碼來執行枚舉。好的一面是,因爲您需要通過COM interop加載它,所以在拆除SL實例時應該清理乾淨。

1

您可以使用Mono.Cecil檢查從.NET應用程序的Silverlight程序集(或不同的.NET運行時組件)。

相關問題