【问题标题】:How to allow a sandboxed Assembly to load certain types?如何允许沙盒程序集加载某些类型?
【发布时间】:2011-12-02 12:52:26
【问题描述】:

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

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

调用 GetTypes() 将抛出 ReflectionTypeLoadException,并将加载程序异常设置为 TypeLoadException

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

如何设置我的沙盒环境以允许这样做?

【问题讨论】:

    标签: c# sandbox


    【解决方案1】:

    您是否要覆盖具有[SecurityCritical] 属性的成员?如果您正在加载非公开的、透明的(部分受信任的)程序集,那么如果您尝试覆盖 SecurityCritical 成员,则会引发此异常。

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

    在本节中,根据访问权限和功能将以下顺序分配给透明、关键和安全关键代码:

    透明

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

    • 方法规则:派生方法不能从 基础方法。对于默认行为,所有派生方法 没有注释的都是透明的。关键类型的衍生物导致 如果重写的方法没有显式地抛出异常 注释为 SecurityCritical。

    尤其是第二个要点。

    【讨论】:

      猜你喜欢
      • 2012-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多