Compartir a través de


CA1401: Los elementos P/Invoke no deben estar visibles

TypeName

PInvokesShouldNotBeVisible

Identificador de comprobación

CA1401

Categoría

Microsoft.Interoperability

Cambio problemático

Problemático

Motivo

Un método público o protegido en un tipo público tiene el atributo DllImportAttribute (también se implementa 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 utilizando la palabra clave Declare en Visual Basic) utilizan los servicios de invocación de plataforma para tener acceso al código no administrado.No se deberían exponer estos métodos.Al mantener estos métodos como privados e internos se garantiza que la biblioteca no se puede utilizar para poner en peligro la seguridad permitiendo que los llamadores obtengan acceso a las API no administradas que, de lo contrario, no pueden llamar.

Cómo corregir infracciones

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

Cuándo suprimir advertencias

No suprima las advertencias de esta regla.

Ejemplo

El siguiente ejemplo declara un método que infringe esta regla.

Imports System

NameSpace MSInternalLibrary

' Violates rule: PInvokesShouldNotBeVisible. 
Public Class NativeMethods
    Public Declare Function RemoveDirectory Lib "kernel32"( _
        ByVal Name As String) As Boolean 
End Class 

End NameSpace 
using System;
using System.Runtime.InteropServices;

namespace InteroperabilityLibrary
{
    // Violates rule: PInvokesShouldNotBeVisible. 
    public class NativeMethods
    {
        [DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
        public static extern bool RemoveDirectory(string name);
    }
}