Поделиться через


CA1401: методы P/Invoke не должны быть видимыми

Свойство Значение
Идентификатор правила CA1401
Заголовок Методы P/Invoke не должны быть видимыми
Категория Совместимость
Исправление является критическим или не критическим Критическое
Включен по умолчанию в .NET 8 Как предложение

Причина

Общедоступный или защищенный метод в общедоступном типе имеет атрибут System.Runtime.InteropServices.DllImportAttribute (также реализуется ключевым словом Declare в Visual Basic).

Описание правила

Методы, помеченные атрибутом DllImportAttribute, или методы, определенные с помощью ключевого слова Declare в Visual Basic, используют службы Platform Invocation Services для доступа к неуправляемому коду. Такие методы не следует делать видимыми. Поддерживая эти методы как частные или внутренние, вы можете быть уверены, что никто не сможет воспользоваться библиотекой для нарушения безопасности путем разрешения вызывающим объектам доступа к неуправляемым API, которые иначе нельзя будет вызвать.

Устранение нарушений

Чтобы исправить нарушение этого правила, измените уровень доступа этого метода.

Когда лучше отключить предупреждения

Для этого правила отключать вывод предупреждений не следует.

Пример

В следующем примере объявляется метод, нарушающий это правило.

// 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