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