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