6

我有一个 .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 安全规则集进行上述工作。

谢谢!

4

1 回答 1

1

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

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

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

于 2012-06-07T16:01:50.017 回答