3

クラスバーにプロパティFooがあります。

public int Foo
{
   get
   {
      return GetFoo();
   }
   set
   {
      SetFoo(value);
   }
}

両方GetFooSetFooで飾られています:

[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」に応答するには?

  1. 管理されていないコードのアクセス許可のためのLinkDemandを持つMarshal.GetIUnknownForObjectを使用して関数を作成しました。
  2. CA2122に文句を言ったFxCopを実行しました
  3. 私はエラーが何を意味するのか、そしてそれを解決する方法についてのヒントを探してCA2122をグーグルで検索しました
  4. 最初のグーグルヒットで、LinkDemandを使用してエラーを解決するというMichealFanningのアドバイスを見ました

私の正気を疑うように思われるあなたの反応を読んだ後、私はすぐにファニングのアドバイスが私の場合には当てはまらないと思いました。DemandとLinkDemandの記事を見て、代わりにDemandを使用してみます。

4

2 に答える 2

6

属性をゲッターとセッターに直接適用できるはずです。つまり、次のようになります。

public int Foo
{
   [SecurityPermission(...)]
   get
   {
      return GetFoo();
   }

   [SecurityPermission(...)]
   set
   {
      SetFoo(value);
   }
}
于 2009-10-06T17:05:46.187 に答える
0

参考までに、を使用して装飾することができます

[PermissionSetAttribute(SecurityAction.LinkDemand、Name = "FullTrust")]

ページを参照してください: このセキュリティ警告はどういう意味ですか(.Netプロセスクラス)?

于 2012-06-06T10:44:21.743 に答える