CA1401: P/Invoke は参照可能になりません
TypeName |
PInvokesShouldNotBeVisible |
CheckId |
CA1401 |
分類 |
Microsoft.Interoperability |
互換性に影響する変更点 |
あり |
原因
パブリック型のパブリック メソッドまたはプロテクト メソッドに、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);
}
}