Partilhar via


CA1401: P/Invokes não deve estar visível

Property valor
ID da regra CA1401
Título P/Invocas não devem estar visíveis
Categoria Interoperabilidade
A correção está quebrando ou não quebrando Quebrando
Habilitado por padrão no .NET 8 Como sugestão

Motivo

Um método público ou protegido em um tipo público tem o System.Runtime.InteropServices.DllImportAttribute atributo (também implementado pela Declare palavra-chave no Visual Basic).

Descrição da regra

Métodos que são marcados com o DllImportAttribute atributo (ou métodos que são definidos usando a Declare palavra-chave no Visual Basic) usam Platform Invocation Services para acessar código não gerenciado. Tais métodos não devem ser expostos. Ao manter esses métodos privados ou internos, você garante que sua biblioteca não possa ser usada para violar a segurança, permitindo que os chamadores acessem APIs não gerenciadas que eles não poderiam chamar de outra forma.

Como corrigir violações

Para corrigir uma violação desta regra, altere o nível de acesso do método.

Quando suprimir avisos

Não suprima um aviso desta regra.

Exemplo

O exemplo a seguir declara um método que viola essa regra.

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