如何允许沙盒装配加载某些类型?

时间:2011-12-02 12:52:27

标签: c# sandbox

我创建了一个沙盒类,我用它来调用不受信任的代码中的方法。我希望不受信任的代码能够实现接口并能够访问某些帮助类。这是我加载程序集的方式:

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

调用 GetTypes()会抛出 ReflectionTypeLoadException ,加载器异常设置为 TypeLoadException

  

“重写成员foo时违反了继承安全规则。重写方法的安全性可访问性必须与要覆盖的方法的安全性可访问性相匹配。”

如何设置沙箱环境以允许此操作?

2 个答案:

答案 0 :(得分:0)

查看此链接,它可能会给您一些有价值的想法

Dynamically load a class and execute a method in .NET

答案 1 :(得分:0)

您是否覆盖了[SecurityCritical]属性的成员?如果要加载非公共,透明(部分受信任)程序集,则在尝试覆盖SecurityCritical成员时将抛出此异常。

有关安全透明代码的详细信息,请参阅this MSDN文章。结果是透明(部分可信)代码无法调用安全关键代码。特别参见本节:

在本节中,基于访问和功能,将以下顺序分配给Transparent,Critical和SafeCritical代码:

  

透明< SafeCritical<临界

     
      
  • 类型规则:从左到右,访问变得更多   限制。派生类型必须至少与基础一样具有限制性   类型。

  •   
  • 方法规则:派生方法无法更改可访问性   基本方法。对于默认行为,所有派生方法都是   没有注释是透明的。关键类型的衍生物导致   如果未明确重写方法,则抛出异常   注释为SecurityCritical。

  •   

特别是第二个要点。