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

属性
规则 ID CA1401
标题 P/Invokes 应该是不可见的
类别 互操作性
修复是中断修复还是非中断修复 重大
在 .NET 10 中默认启用 作为建议

原因

公共类型中的公共或受保护方法具有 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