語言

CA1401: P/Invokes 應該不可見

屬性 值
規則識別碼 CA1401
職稱 P/Invokes 不應該是公開的
類別 互通性
修正是造成中斷還是不中斷 中斷
在 .NET 10 中預設啟用 作為建議
適用語言 C# 與 Visual Basic

原因

公用類别中的公共或受保護方法具有 System.Runtime.InteropServices.DllImportAttribute 屬性(在 Visual Basic 中也由關鍵字 Declare 實現)。

規則描述

以 DllImportAttribute 屬性標記的方法(或是方法使用在 Visual Basic 中定義的 Declare 關鍵詞)會使用 Platform Invocation Services 來存取非受控代碼。 不得公開此類方法。 藉由將這些方法設為私有或內部,您可以確保呼叫者無法存取原本無法呼叫的非受控 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