| 属性 | 值 |
|---|---|
| 规则 ID | CA1401 |
| 标题 | P/Invokes 应该是不可见的 |
| 类别 | 互操作性 |
| 修复会引起中断还是不会引起中断 | 突发 |
| 在 .NET 10 中默认启用 | 作为一种建议 |
| 适用的语言 | C# 和 Visual Basic |
原因
公共类型中的公共或受保护方法具有 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