Compartilhar via


CA1401: P/Invokes não deverá ser visível

TypeName

PInvokesShouldNotBeVisible

CheckId

CA1401

Category (Categoria)

Microsoft.Interoperability

Alteração Significativa

Quebra

Causa

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

Descrição da Regra

Métodos marcados usando o atributo DllImportAttribute (ou métodos definidos usando a palavra-chave Declare em Visual Basic) usam serviços de invocação da plataforma para acessar código não gerenciado.Esses métodos não devem ser expostos.Mantendo esses métodos particulares ou internos, você certifica-se de que sua biblioteca não pode ser usada para romper segurança permitindo aos chamadores acesso às APIs não gerenciadas que não poderiam ser chamadas 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 Alertas

Não elimine um alerta desta regra.

Exemplo

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

Imports System

NameSpace MSInternalLibrary

' Violates rule: PInvokesShouldNotBeVisible.
Public Class NativeMethods
    Public Declare Function RemoveDirectory Lib "kernel32"( _
        ByVal Name As String) As Boolean
End Class

End NameSpace 
using System;
using System.Runtime.InteropServices;

namespace InteroperabilityLibrary
{
    // Violates rule: PInvokesShouldNotBeVisible.
    public class NativeMethods
    {
        [DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
        public static extern bool RemoveDirectory(string name);
    }
}