CA1401: Los elementos P/Invoke no deben estar visibles

Propiedad Value
Identificador de la regla CA1401
Título Los elementos P/Invoke no deben estar visibles
Categoría Interoperabilidad
La corrección es problemática o no problemática Problemático
Habilitado de forma predeterminada en .NET 8 Como sugerencia

Causa

Un método público o protegido en un tipo público tiene el atributo System.Runtime.InteropServices.DllImportAttribute (también implementado por la palabra clave Declare en Visual Basic).

Descripción de la regla

Los métodos marcados con el atributo DllImportAttribute (o los métodos definidos mediante la palabra clave Declare en Visual Basic) usan Servicios de invocación de plataforma para acceder al código no administrado. No se deberían exponer estos métodos. Al mantener estos métodos en privado o internos, se asegura de que la biblioteca no se puede usar para infringir la seguridad permitiendo que los autores de las llamadas tengan acceso a las API no administradas a las que no podrían llamar de otra manera.

Cómo corregir infracciones

Para corregir una infracción de esta regla, cambie el nivel de acceso del método.

Cuándo suprimir las advertencias

No suprima las advertencias de esta regla.

Ejemplo

En el ejemplo siguiente se declara un método que infringe esta regla.

// 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