Share via


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

Property Valor
ID da regra CA1401
Título P/Invokes não devem ser visíveis
Categoria Interoperabilidade
Correção interruptiva ou sem interrupção Quebra
Habilitado por padrão no .NET 8 Como sugestão

Causa

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

Descrição da regra

Métodos marcados com o atributo DllImportAttribute (ou definidos com o uso da palavra-chave Declare no Visual Basic) usam os Serviços de Invocação de Plataforma para acessar código não gerenciado. Esses métodos não devem ser expostos. Mantendo esses métodos privados ou internos, você pode assegurar-se de que sua biblioteca não possa ser usada para violar a segurança por permitir que chamadores acessem APIs não gerenciadas que não conseguiram chamar de outra forma.

Como corrigir violações

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

Quando suprimir avisos

Não suprima um aviso nessa 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