クラスバーにプロパティ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」に応答するには?
- 管理されていないコードのアクセス許可のためのLinkDemandを持つMarshal.GetIUnknownForObjectを使用して関数を作成しました。
- CA2122に文句を言ったFxCopを実行しました
- 私はエラーが何を意味するのか、そしてそれを解決する方法についてのヒントを探してCA2122をグーグルで検索しました
- 最初のグーグルヒットで、LinkDemandを使用してエラーを解決するというMichealFanningのアドバイスを見ました
私の正気を疑うように思われるあなたの反応を読んだ後、私はすぐにファニングのアドバイスが私の場合には当てはまらないと思いました。DemandとLinkDemandの記事を見て、代わりにDemandを使用してみます。