Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何允许沙盒程序集加载某些类型?_C#_Sandbox - Fatal编程技术网

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

特别是第二个要点