【问题标题】:Calling extension methods across classes requires ControlEvidence permission跨类调用扩展方法需要 ControlEvidence 权限
【发布时间】:2010-02-01 03:14:24
【问题描述】:

我一直在努力了解代码访问安全性,我希望有人能够向我解释这种行为以及为什么它需要添加权限。假设我有两种扩展方法

   public static string dib(this string source)
   { 
     return souce.dob();
   }

   public static string dob(this string source)
   {
     return source+"dob":
   }

如果这两个方法出现在同一个类中,它们不需要特殊的 CAS 权限。但是,一旦我将 dob 移入另一个类,我就需要带有 ControlEvidence 标志的 System.Security.Permissions.SecurityPermission。从类之间的扩展方法中调用扩展方法是否有一些限制?除了将所有扩展合并到一个巨大的单个类中之外,还有其他解决方法吗?

'''编辑:''' 事实证明,实际问题与扩展方法无关。有一个构造函数在其中一个类中使用了 RegEx。正则表达式以及在运行时编译的其他函数需要 ControlEvidence。感谢您的帮助,这个 CAS 的东西非常棘手。

【问题讨论】:

    标签: c# code-access-security


    【解决方案1】:

    我无法通过向调用者或被调用者或两者拒绝 SecurityPermission\ControlEvidence 来重现该问题。您正在运行哪个版本的 .NET Framework?另外,为了帮助重现尝试,您能否指定哪些相关程序集缺少 SecurityPermission\ControlEvidence 权限?

    【讨论】:

      【解决方案2】:

      这对我来说似乎很奇怪。坦率地说,我对 CAS 问题不太了解,但如果这真的是扩展方法问题,我会感到非常惊讶。

      如果您使用非扩展方法语法(即TypeName.Method(args))调用扩展方法,它是否有效?如果不是,并且您将它们设为非扩展方法,那么 是否有效?如果您在两种情况下都遇到相同的问题,那么显然这不是扩展方法问题 - 这至少应该可以帮助您研究问题。如果您没有遇到同样的问题,请详细说明具体的工作原理......扩展方法声明的唯一不同应该是额外的属性,我看不出那会如何影响 CAS。

      我假设您是在“正常”场景中调用这些方法,而不是通过 lambda 表达式构建表达式树?这会带来额外的复杂性。

      【讨论】:

        猜你喜欢
        • 2015-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多