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);
}
}