Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| Vlastnost | Hodnota |
|---|---|
| ID pravidla | CA1401 |
| Název | Volání P/Invoke by nemělo být viditelné |
| Kategorie | Vzájemná funkční spolupráce |
| Oprava, která může být destruktivní nebo nedestruktivní | Přerušující |
| Povoleno ve výchozím nastavení v .NET 10 | Jako návrh |
| Příslušné jazyky | C# a Visual Basic |
Příčina
Veřejná nebo chráněná metoda ve veřejném typu má System.Runtime.InteropServices.DllImportAttribute atribut (implementovaný také klíčovým slovem Declare v jazyce Visual Basic).
Popis pravidla
Metody označené atributem DllImportAttribute (nebo metodami definovanými pomocí klíčového Declare slova v jazyce Visual Basic) používají službu volání platformy pro přístup k nespravovanému kódu. Tyto metody by neměly být vystaveny. Pokud tyto metody zachováte jako soukromé nebo interní, zajistíte, že nebude možné použít knihovnu k narušení zabezpečení tím, že volajícím umožníte přístup k nespravovaným rozhraním API, která by jinak nemohli volat.
Jak opravit porušení
Chcete-li opravit porušení tohoto pravidla, změňte úroveň přístupu metody.
Kdy potlačit upozornění
Nepotlačujte upozornění na toto pravidlo.
Příklad
Následující příklad deklaruje metodu, která porušuje toto pravidlo.
// 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