2011-12-02 27 views
1

我做了一個沙箱類,我用它來調用不受信任的代碼中的方法。我希望不受信任的代碼能夠實現一個接口並能夠訪問某些幫助類。這是我的加載程序集:如何讓沙箱裝配加載某些類型?

var assembly = Assembly.LoadFrom(assemblyPath); 
assembly.GetTypes(); 

調用GetTypes()將拋出一個ReflectionTypeLoadException與設置爲TypeLoadException裝載機例外:侵犯而

「繼承安全規則覆蓋成員foo。覆蓋方法的安全性可訪問性必須與被覆蓋方法的安全性可訪問性相匹配。「

如何設置我的沙箱環境以允許這樣做?

回答

0

你重寫與[SecurityCritical]屬性的成員?如果您正在加載非公開透明(部分信任)的程序集,那麼如果您嘗試覆蓋SecurityCritical成員,則會拋出此異常。

有關安全透明代碼的詳細信息,請參閱this MSDN文章。結果是透明(部分可信)代碼無法調用安全關鍵代碼。特別請參見本節:

透明< SafeCritical <臨界

  • 在本節中,以下順序基於訪問和功能分配給透明,嚴重,和SafeCritical代碼

    類型規則:從左到右,訪問將變得更加受限制。派生類型必須至少與基類 類型一樣具有限制性。

  • 方法規則:派生方法不能更改基本方法的可訪問性 。對於默認行爲,未註釋的所有派生方法 都是透明的。如果重寫的方法不是明確地 註釋爲SecurityCritical,則關鍵類型的衍生物會導致拋出異常。

特別地,第二個項目符號點。