Condividi tramite


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 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);
    }
}