CA1401: I P/Invoke non devono essere visibili
TypeName |
PInvokesShouldNotBeVisible |
CheckId |
CA1401 |
Category |
Microsoft.Interoperability |
Breaking Change |
Breaking |
Causa
Un metodo pubblico o protetto in un tipo pubblico presenta l'attributo System.Runtime.InteropServices.DllImportAttribute (implementato anche dalla parola chiave Declare in Visual Basic).
Descrizione della regola
I metodi contrassegnati con l'attributo DllImportAttribute (o quelli definiti mediante la parola chiave Declare in Visual Basic) utilizzano i PInvoke per accedere a codice non gestito.Questi metodi non devono essere esposti.Mantenendo privati o interni questi metodi, si garantisce che la libreria non venga utilizzata per violare la sicurezza consentendo ai chiamanti di accedere ad API non gestite che altrimenti non potrebbero chiamare.
Come correggere le violazioni
Per correggere una violazione di questa regola, modificare il livello di accesso del metodo.
Esclusione di avvisi
Non escludere un avviso da questa regola.
Esempio
Nell'esempio riportato di seguito viene dichiarato un metodo che viola questa regola.
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);
}
}