securitymanager.policyhierarchy()已过时,它的替代品是什么?

时间:2019-01-28 06:23:48

标签: c# .net mono

SecurityManager.PolicyHierarchy()会发出有关已过时的警告,但是当用于比较接收到的策略级别和当前策略级别时,我无法找到替换它的方法或如何替换它。

例如

SecEnumerator levelEnumerator = SecurityManager.PolicyHierarchy();
while (levelEnumerator.MoveNext())
{
 PolicyLevel Seclevel = levelEnumerator.Current as PolicyLevel;
 if (Seclevel == Init.Seclevel)
 {
      return;
 }
}

对于这样的应用程序,现在应该使用什么其他方法?

1 个答案:

答案 0 :(得分:3)

没有替代品。

正如您在MSDN中SecurityManager的文档页面中所看到的那样,与策略相关的所有方法都已过时。这样做的原因是,现在已从CAS中删除策略(嗯,因为.Net4)。要在此处阅读有关此检查的更多信息:

Summary of Changes in Code Access Security

话虽如此,在此警告的描述中,有一个很好的链接可以为您提供更改代码和建议可能的替代方法所需的必要信息:

Code Access Security Policy Compatibility and Migration

Migration: Replacement for Obsolete Calls

为了更好地帮助您,我们需要了解您在此试图实现的目标。描述您的目标,我们也许可以建议替代或替代。


根据您的评论,您似乎想要做的是将一部分用户插入的代码(如您所说)沙盒化并限制其访问。这不是CAS应该用于的目的。实际上,here中有关于此类用法的明确警告:

  

.NET Framework中的代码访问安全性不应用作   代码源的安全边界强制执行机制   或其他身份方面。

您的代码可能应该以某种方式进行重构,以通过SecurityManager.GetStandardSandbox(Evidence)方法使用提供的Evidence(是强名称或url等)来检索一段代码所需的权限,然后使用返回的权限,以便使用CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, StrongName[])方法将程序集加载到新的沙盒AppDomain中。您还可以在创建新域之前更改这些权限,以更好地控制代码的执行。以下文章可以帮助您重构应用程序:

How to: Run Partially Trusted Code in a Sandbox

换句话说,不再有策略,但是您可以在特定的PermissionSet下定义,检索和执行代码。