CA1401: Los elementos P/Invoke no deben estar visibles
Nombre de tipo |
PInvokesShouldNotBeVisible |
Identificador de comprobación |
CA1401 |
Categoría |
Microsoft.Interoperability |
Cambio problemático |
Sí |
Motivo
Un método público o protegido en un tipo público tiene el atributo System.Runtime.InteropServices.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);
}
}