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