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

时间:2012-06-07 15:09:42

标签: c# .net-4.0 appdomain

我有一个.net程序集,其方法无法验证。

我正在尝试将此程序集加载到沙箱应用程序域中。

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

new SecurityPermission(SecurityPermissionFlag.Execution | 
                       SecurityPermissionFlag.SkipVerification);

如果我使用非托管权限加载它可以正常工作,但是应用程序域将不够“沙盒”。

new SecurityPermission(SecurityPermissionFlag.Execution | 
                       SecurityPermissionFlag.SkipVerification |
                       SecurityPermissionFlag.UnmanagedCode);

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

[assembly:SecurityRules(SecurityRuleSet.Level1)]

所以,我的问题是:

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

1 个答案:

答案 0 :(得分:1)

  

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

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

使用SkipVerification而不是UnmanagedCode(或其他方式)是没有意义的。这两个是等价的,我认为它是框架中存在的错误。