Bagikan melalui


CA1401: P/Invoke tidak boleh terlihat

Properti Nilai
ID Aturan CA1401
Judul P/Invoke tidak boleh terlihat
Golongan Interoperabilitas
Perbaikan bersifat disruptif atau non-disruptif Merusak
Diaktifkan secara default di .NET 8 Sebagai saran

Penyebab

Metode publik atau terlindungi dalam jenis publik memiliki System.Runtime.InteropServices.DllImportAttribute atribut (juga diimplementasikan oleh Declare kata kunci di Visual Basic).

Deskripsi aturan

Metode yang ditandai dengan DllImportAttribute atribut (atau metode yang ditentukan dengan menggunakan Declare kata kunci di Visual Basic) menggunakan Platform Invocation Services untuk mengakses kode yang tidak dikelola. Metode seperti itu tidak boleh diperlihatkan. Dengan menjaga metode ini tetap privat atau internal, Anda memastikan bahwa pustaka Anda tidak dapat digunakan untuk melanggar keamanan dengan mengizinkan penelepon mengakses API yang tidak dikelola yang tidak dapat mereka panggil sebaliknya.

Cara memperbaiki pelanggaran

Untuk memperbaiki pelanggaran aturan ini, ubah tingkat akses metode.

Kapan harus menekan peringatan

Jangan menyembunyikan peringatan dari aturan ini.

Contoh

Contoh berikut mendeklarasikan metode yang melanggar aturan ini.

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