Aracılığıyla paylaş


CA1401: P/Invoke'lar görünür olmamalıdır

Özellik Değer
Kural Kimliği CA1401
Başlık P/Invoke'lar görünür olmamalıdır
Kategori Birlikte çalışabilirlik
Hataya neden olan veya bozulmayan düzeltme Yeni
.NET 8'de varsayılan olarak etkin Öneri olarak

Neden

Ortak türdeki genel veya korumalı bir yöntem özniteliğine System.Runtime.InteropServices.DllImportAttribute sahiptir (Visual Basic'te anahtar sözcüğü tarafından Declare da uygulanır).

Kural açıklaması

özniteliğiyle DllImportAttribute işaretlenmiş yöntemler (veya Visual Basic'te anahtar sözcüğü kullanılarak Declare tanımlanan yöntemler), yönetilmeyen koda erişmek için Platform Çağırma Hizmetleri'ni kullanır. Bu tür yöntemler açıkta kalmamalıdır. Bu yöntemleri özel veya dahili tutarak, çağıranların aksi halde çağıramadıkları yönetilmeyen API'lere erişmesine izin vererek kitaplığınızın güvenliği ihlal etmek için kullanılamadığından emin olursunuz.

İhlalleri düzeltme

Bu kuralın ihlalini düzeltmek için yönteminin erişim düzeyini değiştirin.

Uyarıların ne zaman bastırılması gerekiyor?

Bu kuraldan uyarıyı bastırmayın.

Örnek

Aşağıdaki örnek, bu kuralı ihlal eden bir yöntem bildirir.

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