2010-02-01 60 views
1

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

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内容非常棘手。

回答

0

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

0

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

如果您使用非扩展方法语法(即TypeName.Method(args))调用扩展方法,它是否工作?如果不是,并且你让它们不是扩展方法,工作吗?如果在这两种情况下遇到同样的问题,那么显然这不是一个扩展方法问题 - 至少应该帮助您研究问题。如果你不要遇到同样的问题,请详细说明什么是有效的......与扩展方法声明的唯一区别应该是额外的属性,而且我看不出如何影响CAS。

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