【问题标题】:How does one fix the "'System.Security.Permissions.SecurityAction.RequestMinimum' is obsolete" compilation error?如何修复“'System.Security.Permissions.SecurityAction.RequestMinimum' 已过时”编译错误?
【发布时间】:2011-11-25 12:19:56
【问题描述】:

在从 .NET 3.5 升级某些 ASP.NET 代码时,我收到以下编译警告作为错误: 'System.Security.Permissions.SecurityAction.RequestMinimum' 已过时。

该属性已应用到组件级别:

[assembly: System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.RequestMinimum, Execution=true)]

代码还使用了 P&P Web 客户端软件工厂,特别是 ObjectBuilder.WCSFExtensions 库。 此外,代码还提供了一些角色提供者实现。

请记住,此代码在其他项目中用作框架代码,因此很难确定可能存在哪些安全要求。


所以百万美元的问题是:

“System.Security.Permissions.SecurityAction”枚举需要使用什么值?

或者,是否有更好的方法来应用 this 安全属性?

【问题讨论】:

    标签: asp.net code-access-security wcsf


    【解决方案1】:

    您是否阅读了完整的编译器警告或访问了其中包含的链接? “裸”CLR 不再限制 .NET 4.0 下的 CAS 权限,除非您翻转“旧模式”开关,因此您的 RequestMinimum 使用没有替代品。程序集级别的 SecurityPermissionAttribute 应该被删除,而不是修改。

    有关 4.0 CAS 更改的比 MSDN 上更完整的说明,请参阅 http://blogs.msdn.com/b/shawnfa/archive/2009/05/21/security-policy-in-the-v4-clr.aspx 和 http://blogs.msdn.com/b/shawnfa/archive/2010/02/24/so-is-cas-dead-in-net-4-or-what.aspx。

    【讨论】:

    • 感谢 Nicole,您提到的文章提供了比 MSDN 文档更清晰的背景(这是全面的,但没有给出任何明确/明显的声明:删除属性)。我不确定删除该属性会产生什么影响。最后,我选择暂时将该代码保留在 3.5 中。
    • 程序集级别的 RequestMinimum 仅指示主机在未授予指定权限时不要加载程序集。无论如何,执行权限的 RequestMinimum 几乎毫无用处,因为主机不会运行程序集中的任何代码,除非它具有执行权限。未授予权限时运行时行为的唯一区别是异常的详细信息和引发异常的时间。但是,无论该属性是否存在,您都会在程序集中的任何代码执行之前看到一个异常。
    【解决方案2】:

    http://msdn.microsoft.com/en-us/library/ee471421.aspx

    问题似乎在于整个程序集级别的声明性安全性已被标记为过时。也许您可以改为在方法级别应用它?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多