CA1401:P/Invokes 应该是不可见的

属性
规则 ID CA1401
标题 P/Invokes 应该是不可见的
类别 互操作性
修复是中断修复还是非中断修复 重大
在 .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