CA1401: P/Invoke は参照可能になりません
プロパティ | 値 |
---|---|
ルール ID | CA1401 |
Title | P/Invoke は参照可能であることはできません |
[カテゴリ] | 相互運用性 |
修正が中断ありか中断なしか | あり |
.NET 9 では既定で有効 | 提案として |
原因
パブリック型のパブリック メソッドまたはプロテクト メソッドに、System.Runtime.InteropServices.DllImportAttribute 属性があります (Visual Basic では Declare
キーワードでも実装されます)。
規則の説明
DllImportAttribute 属性でマークされているメソッド (または Visual Basic で Declare
キーワードを使用して定義されているメソッド) がプラットフォーム呼び出しサービスを使用して、アンマネージド コードにアクセスしています。 このようなメソッドは公開しないでください。 これらをプライベート メソッドまたは内部メソッドとして保持し、その上で他の方法で呼び出すことができなかったアンマネージ API に呼び出し元がアクセスできるようにすることで、ライブラリを使用したセキュリティ侵害を防ぐことができます。
違反の修正方法
この規則違反を修正するには、メソッドのアクセス レベルを変更します。
どのようなときに警告を抑制するか
この規則による警告は抑制しないでください。
例
次の例では、この規則に違反するメソッドが定義されています。
// Violates rule: PInvokesShouldNotBeVisible.
public class NativeMethods
{
[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
public static extern bool RemoveDirectory(string name);
}
Imports System
Namespace ca1401
' Violates rule: PInvokesShouldNotBeVisible.
Public Class NativeMethods
Public Declare Function RemoveDirectory Lib "kernel32" (
ByVal Name As String) As Boolean
End Class
End Namespace
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET