Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
| Proprietà | valore |
|---|---|
| ID regola | CA1401 |
| Title | I P/Invoke non devono essere visibili |
| Categoria | Interoperabilità |
| La correzione causa un'interruzione o meno | Interruzione |
| Abilitato per impostazione predefinita in .NET 10 | Come suggerimento |
| Linguaggi applicabili | C# e Visual Basic |
Causa
Un metodo pubblico o protetto in un tipo pubblico ha l'attributo System.Runtime.InteropServices.DllImportAttribute (implementato anche dalla Declare parola chiave in Visual Basic).
Descrizione regola
I metodi contrassegnati con l'attributo DllImportAttribute (o i metodi definiti tramite la Declare parola chiave in Visual Basic) usano Platform Invocation Services per accedere al codice non gestito. Questi metodi non devono essere esposti. Mantenendo questi metodi privati o interni, si assicura che la libreria non possa essere usata per compromettere la sicurezza consentendo ai chiamanti di accedere alle API non supervisionate che altrimenti non sarebbero accessibili.
Come correggere le violazioni
Per correggere una violazione di questa regola, modificare il livello di accesso del metodo .
Quando eliminare gli avvisi
Non sopprimere un avviso da questa regola.
Esempio
Nell'esempio seguente viene dichiarato un metodo che viola questa regola.
// 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