C# 如何允许沙盒程序集加载某些类型?
我创建了一个沙盒类,用于在不受信任的代码中调用方法。我希望不受信任的代码能够实现一个接口,并能够访问某些帮助类。以下是加载程序集的方式:C# 如何允许沙盒程序集加载某些类型?,c#,sandbox,C#,Sandbox,我创建了一个沙盒类,用于在不受信任的代码中调用方法。我希望不受信任的代码能够实现一个接口,并能够访问某些帮助类。以下是加载程序集的方式: var assembly = Assembly.LoadFrom(assemblyPath); assembly.GetTypes(); 调用GetTypes()将抛出一个ReflectionTypeLoadException,加载程序异常设置为TypeLoadException: “重写成员foo时违反了继承安全规则。重写方法的安全可访问性必须与被重写方法
var assembly = Assembly.LoadFrom(assemblyPath);
assembly.GetTypes();
调用GetTypes()将抛出一个ReflectionTypeLoadException,加载程序异常设置为TypeLoadException:
“重写成员foo时违反了继承安全规则。重写方法的安全可访问性必须与被重写方法的安全可访问性匹配。”
如何设置沙盒环境以允许此操作?是否使用
[SecurityCritical]
属性覆盖成员?如果正在加载一个非公共、透明(部分受信任)的程序集,则如果尝试重写SecurityCritical
成员,则会引发此异常
有关安全透明代码的更多信息,请参阅文章。结果是透明(部分受信任)代码无法调用安全关键代码。具体见本节:
在本节中,根据访问权限和功能将以下顺序分配给透明、关键和安全关键代码:
透明<安全关键<关键
- 类型规则:从左到右,访问变得更加频繁 限制性的。派生类型必须至少与基类型一样严格 类型
- 方法规则:派生方法无法从更改可访问性 基本方法。对于默认行为,所有 没有注释的是透明的。临界类型的导数会导致 如果未显式指定重写的方法,则引发异常 注释为SecurityCritical