如何允许沙盒程序集加载某些类型

本文关键字:类型 加载 程序集 何允许 | 更新日期: 2023-09-27 18:16:22

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

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

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

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

我如何设置我的沙盒环境来允许这个?

如何允许沙盒程序集加载某些类型

您是否使用[SecurityCritical]属性重写成员?如果您正在加载一个非公开的、透明的(部分受信任的)程序集,那么如果您试图覆盖SecurityCritical成员,就会抛出此异常。

有关安全透明代码的更多信息,请参阅此MSDN文章。结果是透明(部分可信)代码不能调用安全关键代码。具体参见本节:

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

透明& lt;SafeCritical & lt;关键的

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

  • 方法规则:派生方法不能改变可访问性基方法。对于默认行为,所有的派生方法没有注释的是透明的。临界类型的导数导致an如果未显式地重写方法,则抛出

特别是第二个要点