CA1401: P/Invokes nie powinny być widoczne

Właściwości Wartość
Identyfikator reguły CA1401
Tytuł Elementy P/Invoke nie powinny być widoczne
Kategoria Współdziałanie
Poprawka powodująca niezgodność lub niezgodność Kluczowa
Domyślnie włączone na platformie .NET 8 Jako sugestia

Przyczyna

Publiczna lub chroniona metoda w typie publicznym ma System.Runtime.InteropServices.DllImportAttribute atrybut (implementowany również przez Declare słowo kluczowe w Visual Basic).

Opis reguły

Metody oznaczone atrybutem DllImportAttribute (lub metodami zdefiniowanymi za pomocą słowa kluczowego Declare w Visual Basic) używają usług wywołania platformy w celu uzyskania dostępu do kodu niezarządzanych. Takie metody nie powinny być udostępniane. Zachowując te metody prywatne lub wewnętrzne, upewnij się, że biblioteka nie może być używana do naruszenia zabezpieczeń, zezwalając obiektom wywołującym na dostęp do niezarządzanych interfejsów API, których nie można wywołać w inny sposób.

Jak naprawić naruszenia

Aby naprawić naruszenie tej reguły, zmień poziom dostępu metody.

Kiedy pomijać ostrzeżenia

Nie pomijaj ostrzeżeń dla tej reguły.

Przykład

Poniższy przykład deklaruje metodę, która narusza tę regułę.

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