Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
| Свойство | Значение |
|---|---|
| Идентификатор правила | 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