Share via


CA1401: P/Invokes bör inte visas

Property Värde
Regel-ID CA1401
Title P/Invokes bör inte vara synliga
Kategori Samverkan
Korrigeringen är icke-bakåtkompatibel Bryta
Aktiverad som standard i .NET 8 Som förslag

Orsak

En offentlig eller skyddad metod i en offentlig typ har System.Runtime.InteropServices.DllImportAttribute attributet (även implementerat av nyckelordet Declare i Visual Basic).

Regelbeskrivning

Metoder som är markerade med DllImportAttribute attributet (eller metoder som definieras med nyckelordet Declare i Visual Basic) använder Plattformsanropstjänster för att få åtkomst till ohanterad kod. Sådana metoder bör inte exponeras. Genom att hålla dessa metoder privata eller interna ser du till att biblioteket inte kan användas för att bryta mot säkerheten genom att ge anropare åtkomst till ohanterade API:er som de inte kunde anropa på annat sätt.

Så här åtgärdar du överträdelser

Om du vill åtgärda ett brott mot den här regeln ändrar du metodens åtkomstnivå.

När du ska ignorera varningar

Ignorera inte en varning från den här regeln.

Exempel

I följande exempel deklareras en metod som bryter mot den här regeln.

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