CA1400: Os pontos de entrada de P/Invoke devem existir
TypeName |
PInvokeEntryPointsShouldExist |
CheckId |
CA1400 |
<strong>Categoria</strong> |
Microsoft.Interoperability |
Alteração significativa |
Não-separável |
Causa
Um método público ou protegido é marcado com o System.Runtime.InteropServices.DllImportAttribute.Ou a biblioteca não gerenciada não pôde ser localizada ou o método não pôde ser correspondido para uma função na biblioteca.Se a regra não é possível localizar o nome do método exatamente conforme especificado, ele procura ANSI ou versões de caracteres largos do método colocando o sufixo de nome do método com 'A' ou 'W'.Se nenhuma correspondência for encontrada, a regra tenta localizar uma função usando o formato de nome de __stdcall (_MyMethod@12, onde 12 representa o comprimento dos argumentos).Se nenhuma correspondência for encontrada e o nome do método começa com '#', a regra de pesquisa para a função como uma referência ordinal em vez de uma referência de nome.
Descrição da regra
Nenhuma verificação de tempo de compilação está disponível para certificar-se de que os métodos marcados com DllImportAttribute estão localizados na DLL referenciado não gerenciada.Se nenhuma função que tem o nome especificado estiver na biblioteca ou os argumentos para o método não coincidem com os argumentos da função, o common language runtime lança uma exceção.
Como corrigir violações
Para corrigir uma violação desta regra, corrigir o método que tem o DllImportAttribute atributo.Certifique-se de que a biblioteca não gerenciada existe e se está no mesmo diretório que o assembly que contém o método.Se a biblioteca estiver presente e corretamente referenciado, verifique se o nome do método, o tipo de retorno e a assinatura de argumento correspondem a função de biblioteca.
Quando suprimir avisos
Não suprimi um aviso da regra quando a biblioteca não gerenciada está no mesmo diretório que o assembly gerenciado que faz referência a ele.Ele pode ser seguro eliminar um aviso esta regra no caso em que a biblioteca não gerenciada não pôde ser localizada.
Exemplo
O exemplo a seguir mostra um tipo que viola a regra.Nenhuma função chamada DoSomethingUnmanaged ocorre no Kernel32. dll.
using System.Runtime.InteropServices;
namespace InteroperabilityLibrary
{
public class NativeMethods
{
// If DoSomethingUnmanaged does not exist, or has
// a different signature or return type, the following
// code violates rule PInvokeEntryPointsShouldExist.
[DllImport("kernel32.dll")]
public static extern void DoSomethingUnmanaged();
}
}