Бөлісу құралы:


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

Свойство Значение
Идентификатор правила CA1401
Заголовок Не рекомендуется, чтобы методы P/Invoke были видимыми
Категория Совместимость
Исправление является критическим или не критическим Срочное
Включен по умолчанию в .NET 10 Как предложение
Применимые языки C# и Visual Basic

Причина

Общедоступный или защищенный метод в общедоступном типе имеет атрибут 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