Share via


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