CA1401:P/Invokes 应该是不可见的
属性 | 值 |
---|---|
规则 ID | CA1401 |
标题 | P/Invokes 应该是不可见的 |
类别 | 互操作性 |
修复是中断修复还是非中断修复 | 重大 |
在 .NET 9 中默认启用 | 作为建议 |
原因
公共类型中的公共或受保护方法具有 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