我在类 Bar 上有一个属性 Foo:
public int Foo
{
get
{
return GetFoo();
}
set
{
SetFoo(value);
}
}
两者GetFoo
都SetFoo
装饰有:
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
结果,FxCop 正确地抱怨 Foo 属性(或者更确切地说它的隐式 getter 和 setter 方法)没有相同的 LinkDemand:
CA2122:Microsoft.Security:“Bar.Foo.get()”调用具有 LinkDemand 的“Bar.GetFoo()”。通过进行此调用,“Bar.GetFoo()”间接暴露给用户代码。查看以下可能公开绕过安全保护的方法的调用堆栈:
但是,当我尝试将相同SecurityPermission
的属性应用于属性以修复此警告时,结果证明属性不是该属性的有效目标。
如何正确修复此 FxCop 警告?
编辑:回应 Eric Lippert 的评论“为什么是 LinkDemand”?
- 我使用 Marshal.GetIUnknownForObject 编写了一个函数,该函数具有 LinkDemand 非托管代码权限。
- 我跑了 FxCop,它抱怨 CA2122
- 我在 CA2122 上搜索了有关错误含义以及如何解决它的提示
- 在第一个谷歌点击中,我看到了 Micheal Fanning 使用 LinkDemand 解决错误的建议
在阅读了您似乎质疑我的理智的反应后,我很快猜到范宁的建议不适用于我的情况。我现在查看了Demand 与 LinkDemand文章,并将尝试改用 Demand。