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