Condividi tramite


CA1401: I P/Invoke non devono essere visibili

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 9 Come suggerimento

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, assicurarsi che la libreria non possa essere usata per violare la sicurezza consentendo ai chiamanti di accedere alle API non gestite che non potevano chiamare altrimenti.

Come correggere le violazioni

Per correggere una violazione di questa regola, modificare il livello di accesso del metodo .

Quando eliminare gli avvisi

Non escludere 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