c#无法验证的代码,没有非托管权限

rav*_*oli 6 c# appdomain .net-4.0

我有一个.net程序集,其方法不可验证.

我试图在沙盒应用程序域中加载此程序集.

如果我加载了跳过验证,但没有加载非托管我得到验证异常.像这样:

new SecurityPermission(SecurityPermissionFlag.Execution | 
                       SecurityPermissionFlag.SkipVerification);
Run Code Online (Sandbox Code Playgroud)

如果我使用非托管权限加载它可以工作,但那么app域将不够"沙盒".

new SecurityPermission(SecurityPermissionFlag.Execution | 
                       SecurityPermissionFlag.SkipVerification |
                       SecurityPermissionFlag.UnmanagedCode);
Run Code Online (Sandbox Code Playgroud)

另外 - 我正在运行.Net 4,并且为了使上述工作我必须切换到transperancy模型级别1,如下所示:

[assembly:SecurityRules(SecurityRuleSet.Level1)]
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:

  1. 有没有办法在没有UnamangedCode权限的情况下运行未验证的代码.
  2. 有没有办法使用Level2安全规则集进行上述工作.

谢谢!

usr*_*usr 1

有没有办法在没有 UnamangedCode 权限的情况下运行未经验证的代码。

即使有,那时你也会放弃任何安全感。不可验证的代码与非托管代码具有相同的功能。例如,它允许您破坏类型系统。

拥有 SkipVerification 而没有 UnmanagedCode(或反之亦然)是没有意义的。两者是等价的,我认为这是两者都存在的框架中的一个错误。