CA1401:不應顯示 P/Invokes
屬性 | 值 |
---|---|
規則識別碼 | CA1401 |
標題 | P/Invokes 不應該為可見的 |
類別 | 互通性 |
修正程式是中斷或非中斷 | 中斷 |
預設在 .NET 8 中啟用 | 建議 |
原因
公用類型中的公用或受保護方法具有 System.Runtime.InteropServices.DllImportAttribute 屬性(也由 Visual Basic 中的 關鍵字實作 Declare
)。
檔案描述
以 DllImportAttribute 屬性標記的方法(或在 Visual Basic 中使用 關鍵字所定義 Declare
的方法)會使用 Platform Invocation Services 來存取 Unmanaged 程式碼。 但不得公開 (Expose) 此類方法。 藉由保留這些方法私用或內部,您可以允許呼叫者存取無法呼叫的 Unmanaged API,以確保您的程式庫無法入侵安全性。
如何修正違規
若要修正此規則的違規,請變更 方法的存取層級。
隱藏警告的時機
請勿隱藏此規則的警告。
範例
下列範例會宣告違反此規則的方法。
// 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