次の方法で共有


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

TypeName

PInvokesShouldNotBeVisible

CheckId

CA1401

[カテゴリ]

Microsoft.Interoperability

互換性に影響する変更点

あり

原因

パブリック型のパブリック メソッドまたはプロテクト メソッドに、System.Runtime.InteropServices.DllImportAttribute 属性があります (Visual Basic では Declare キーワードでも実装されます)。

規則の説明

DllImportAttribute 属性でマークされているメソッド (Visual Basic の場合、Declare キーワードを使用して定義されたメソッド) では、プラットフォーム呼び出しサービスを使用して、アンマネージ コードにアクセスします。このようなメソッドは公開しないでください。メソッドをプライベートまたは内部に保つことで、ライブラリのセキュリティは保護されます。公開すると、本来はアクセスできないアンマネージ API にアクセスできるようになります。

違反の修正方法

この規則違反を修正するには、メソッドのアクセス レベルを変更します。

警告を抑制する状況

この規則による警告は抑制しないでください。

使用例

この規則に違反するメソッドの宣言例を次に示します。

Imports System

NameSpace MSInternalLibrary

' Violates rule: PInvokesShouldNotBeVisible.
Public Class NativeMethods
    Public Declare Function RemoveDirectory Lib "kernel32"( _
        ByVal Name As String) As Boolean
End Class

End NameSpace 
using System;
using System.Runtime.InteropServices;

namespace InteroperabilityLibrary
{
    // Violates rule: PInvokesShouldNotBeVisible.
    public class NativeMethods
    {
        [DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
        public static extern bool RemoveDirectory(string name);
    }
}