2011-10-10 61 views
1

加載程序集在Silverlight 4應用程序我試圖實例化一個對象,它的類型不知道,直到運行時,:無法使用此代碼在強烈簽署的Silverlight代碼

Assembly assembly = Assembly.LoadFrom("Name.Of.Some.dll"); 
Type type = assembly.GetType("Full.NameSpace.And.ClassName"); 
object o = Activator.CreateInstance(type); 

然而, Assembly.LoadFrom()調用會導致一個例外:

{System.MethodAccessException: Attempt by security transparent method 'Mosaic.Layers.LayerParamChangeHandlerInfo.CreateParamHandler()' to access security critical method 'System.Reflection.Assembly.LoadFrom(System.String)' failed. 

我做了一些谷歌搜索的錯誤,但我仍然無法弄清楚,爲什麼我得到異常(一些相關的組件是我相信這是強烈的簽名),更重要的是,如何解決問題並創造我的客體。

回答

2

您不允許從您自己的代碼中調用此方法,導致其安全性至關重要,並且只能在.NET Framework內部使用。

請勿在您的應用程序中使用此成員。如果你這樣做,你的代碼將拋出一個MethodAccessException。此成員對安全至關重要,它將.NET Framework for Silverlight類庫限制爲內部使用。

在Silverlight中,程序集唯一可用的Load方法是Assembly.Load(string)。如果要動態加載程序集,請參見this方法。

+0

查看Assembly.LoadString()的文檔,所需的參數是完整的程序集名稱,但不清楚到底是什麼在我的情況。我嘗試了「Name.Of.Some.dll」和「Name.Of.Some」,它們都導致FileNotFoundException。 而且,除非我誤讀它,否則您鏈接的文章使用流加載 - 我沒有流 - 只是需要實例化的程序集和類的名稱。 –

+0

@Dave W:裝配位於哪裏,你正在裝載?你是否在瀏覽器外運行你的Silverlight應用程序? – Jehof

+0

@Dave W:我認爲你需要指定完整的程序集名稱,包括版本,文化和公鑰標記。看到這個問題http://stackoverflow.com/questions/3015513/silverlight-assembly-load-only-works-with-the-full-strong-name – Jehof