1

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

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

4

2 回答 2

0

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

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

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

于 2010-02-01T07:08:10.070 回答
0

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

于 2010-02-01T20:52:03.453 回答