Condividi tramite


I P/Invokes non devono essere visibili

Aggiornamento: novembre 2007

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 assicura che la libreria non venga utilizzata per violare la protezione consentendo ai chiamanti di accedere ad API non gestite che altrimenti non potrebbero chiamare.

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