2009-09-18 21 views

答えて

7

要件。 CLRをよく見てそこのコードを見ると、NativeMethodsクラスの中にP/Invokeコードが表示されることがよくあります。私は、FxCopがP/Invokeコードをこのようなクラスに置くことを推奨すると信じています。

1

これらはCLRによって特別に処理されません。 P/InvokeをNativeMethods、SafeNativeMethods、UnsafeNativeMethodsというクラスの中に置くことをお勧めします。

アセンブリでFxCopを実行すると、この推奨が有効になります。

2

、それは条約のではないそれはあなたがpを置くべき/ NativeMethods *という名前のクラスにメソッドを呼び出すと言うだけの大会だが、それを独自の方法をやってからあなたを防ぐために、技術的な制約がありません...

2

あなたのクラスにはそうした名前を付けることができますが、引き続きコード解析の警告CA1060を取得します。この警告は、条約に従わないことを示しています。したがって、この警告を回避するには、P/Invokeメソッドを持つクラスの命名規則に従う必要があります。 P/Invokeメソッドを分類する場合は、名前空間を使用できます。たとえば、次のようにリンクしているページの

  • MyProject.Com.NativeMethods
  • MyProject.User32.NativeMethods
  • MyProject.OleStorage.NativeMethods
+0

私の解釈はそれが慣例であるということです、ではないことランタイムは何かを変えます。開発者は、クラスに適切なセキュリティ属性を設定する責任があります。たとえば、次のようになります。 "NativeMethods - このクラスは、アンマネージコードアクセス許可のスタックウォークを抑制しません(System.Security.SuppressUnmanagedCodeSecurityAttributeをこのクラスに適用しないでください)。 –

+0

関連項目:"これらのクラスはNativeMethodsクラスに似ていますが、 SuppressUnmanagedCodeSecurityAttributeという特別な属性を使用してマークしますこの属性を適用すると、実行時にすべての呼び出し元にUnmanagedCode権限があることを確認するために完全なスタックウォークは実行されません。この属性は細心の注意を払って使用する必要があります。誤って実装されているとセキュリティに深刻な影響を与える可能性があります。 " –

+0

ありがとうございます。私は私の答えを更新しました。 –

関連する問題