Partilhar via


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

TypeName

PInvokesShouldNotBeVisible

CheckId

CA1401

<strong>Categoria</strong>

Microsoft.Interoperability

Alteração significativa

Quebrando

Causa

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 na Visual Basic).

Descrição da regra

Os métodos são marcados com o DllImportAttribute atributo (ou métodos que são definidos usando o Declare palavra-chave na Visual Basic) usar 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 private ou internal, certifique-se de que sua biblioteca não pode ser usada para violar a segurança por permitir que chamadores acessem APIs não gerenciadas, não pôde chamar caso contrário.

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 suprimir um aviso da regra.

Exemplo

O exemplo a seguir declara um método que viola essa 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);
    }
}