Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
| Propiedad | Valor |
|---|---|
| Identificador de la regla | CA1401 |
| Título | Los P/Invoke no deben estar visibles |
| Categoría | Interoperabilidad |
| La corrección interrumpe o no interrumpe | Ruptura |
| Habilitado de forma predeterminada en .NET 10 | Como sugerencia |
| Idiomas aplicables | C# y Visual Basic |
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 privados o internos, se asegura de que la biblioteca no se puede utilizar para comprometer la seguridad al permitir que los llamantes tengan acceso a APIs no gestionadas 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