Sdílet prostřednictvím


CA1401: Volání nespravovaných kódů by neměla být viditelná

TypeName

PInvokesShouldNotBeVisible

CheckId

CA1401

Kategorie

Microsoft.interoperability

Narušující změna

Narušující

Příčina

Veřejná nebo chráněná metoda v rámci veřejného typu obsahuje atribut DllImportAttribute (také implementován klíčovým slovem Declare v Visual Basic).

Popis pravidla

Metody, například ty, které jsou označeny pomocí atributu DllImportAttribute (nebo metody, které jsou definovány pomocí klíčového slova v Declare v rámci Visual Basic) používají služby vyvolání platformy pro přístup k nespravovanému kódu.Tyto metody by neměly být vystaveny.Udržováním těchto metod jako soukromých nebo interních je zajištěno, že nedojde k porušení bezpečnosti použitím knihovny umožněním přístupu volajících k nespravovaným rozhraním API, které by jinak volat nemohli.

Jak vyřešit porušení

Pro napravení porušení tohoto pravidla je zapotřebí změnit úroveň přístupu k metodě.

Kdy potlačit upozornění

Nepotlačujte upozornění na toto pravidlo.

Příklad

Následující příklad deklaruje metodu, která toto pravidlo porušuje.

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