如何允许沙盒程序集加载某些类型
本文关键字:类型 加载 程序集 何允许 | 更新日期: 2023-09-27 18:16:22
我做了一个沙盒类,我用它来调用不受信任代码中的方法。我希望不受信任的代码能够实现一个接口,并能够访问某些帮助类。我是这样加载程序集的:
var assembly = Assembly.LoadFrom(assemblyPath);
assembly.GetTypes();
调用GetTypes()将抛出ReflectionTypeLoadException,加载器异常设置为TypeLoadException:
"重写成员foo时违反了继承安全规则。重写方法的安全可访问性必须与被重写方法的安全可访问性相匹配。"
我如何设置我的沙盒环境来允许这个?
您是否使用[SecurityCritical]
属性重写成员?如果您正在加载一个非公开的、透明的(部分受信任的)程序集,那么如果您试图覆盖SecurityCritical
成员,就会抛出此异常。
有关安全透明代码的更多信息,请参阅此MSDN文章。结果是透明(部分可信)代码不能调用安全关键代码。具体参见本节:
在本节中,根据访问权限和功能,将透明代码、关键代码和安全代码按以下顺序分配:
透明& lt;SafeCritical & lt;关键的
类型规则:从左到右,访问变得更多限制性的。派生类型必须至少与基类具有同样的限制类型。
方法规则:派生方法不能改变可访问性基方法。对于默认行为,所有的派生方法没有注释的是透明的。临界类型的导数导致an如果未显式地重写方法,则抛出
特别是第二个要点