跨类调用扩展方法需要ControlEvidence权限

时间:2010-02-01 03:14:24

标签: c# code-access-security

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

   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的东西非常棘手。

2 个答案:

答案 0 :(得分:0)

这对我来说似乎很奇怪。坦率地说,我对CAS问题知之甚少,但如果这真的是一个扩展方法问题,我会感到非常惊讶。

如果使用非扩展方法语法(即TypeName.Method(args))调用扩展方法,它是否有效?如果没有,并且你使它们成为非扩展方法,那么 是否有效?如果你在两种情况下遇到同样的问题,那么显然它不是一个扩展方法问题 - 至少应该帮助你研究这个问题。如果你没有遇到同样的问题,请详细说明哪些有用......唯一不同的是扩展方法声明应该是额外的属性,我看不出那是怎么回事影响CAS。

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

答案 1 :(得分:0)

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