CA1401: P/Invoke は参照可能になりません

プロパティ
ルール ID CA1401
Title P/Invoke は参照可能であることはできません
[カテゴリ] 相互運用性
修正が中断ありか中断なしか あり
.NET 8 では既定で有効 提案として

原因

パブリック型のパブリック メソッドまたはプロテクト メソッドに、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