共用方式為


P/Invokes 不應該為可見的

更新:2007 年 11 月

型別名稱

PInvokesShouldNotBeVisible

CheckId

CA1401

分類

Microsoft.Interoperability

中斷變更

中斷

原因

公用型別中之公用或保護的方法會含有 System.Runtime.InteropServices.DllImportAttribute 屬性 (也會由 Visual Basic 中的 Declare 關鍵字實作)。

規則描述

DllImportAttribute 屬性標記的方法 (或使用 Visual Basic 中 Declare 關鍵字所定義的方法),使用平台引動服務存取 Unmanaged 程式碼,但不得公開 (Expose) 此類方法。使這些方法保持為私用或內部可確保程式庫無法用於侵害安全性,做法是允許呼叫端存取之前無法呼叫的 Unmanaged API。

如何修正違規

若要修正此規則的違規情形,請變更方法的存取層級。

隱藏警告的時機

請勿隱藏此規則的警告。

範例

下列範例會宣告違反此規則的方法。

Imports System

NameSpace MSInternalLibrary

' Violates rule: PInvokesShouldNotBeVisible.
Public Class NativeMethods
    Public Declare Function RemoveDirectory Lib "kernel32"( _
        ByVal Name As String) As Boolean
End Class

End NameSpace 
using System;
using System.Runtime.InteropServices;

namespace InteroperabilityLibrary
{
    // Violates rule: PInvokesShouldNotBeVisible.
    public class NativeMethods
    {
        [DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
        public static extern bool RemoveDirectory(string name);
    }
}