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