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