Compartilhar via


Aviso das ferramentas de vinculador LNK4227

aviso de operação de metadados (HRESULT): warning_message

O vinculador detectou diferenças de metadados ao mesclar:

  • Um ou mais assemblies referenciados com o assembly que está sendo criado no momento.

  • Um ou mais arquivos de código-fonte em uma compilação.

Por exemplo, o aviso LNK4227 poderá ser causado se você tiver duas funções globais com o mesmo nome, mas informações de parâmetro declaradas de maneira diferente (ou seja, declarações não consistentes em todos os compilands). Use ildasm.exe /TEXT /METADATA object_file em cada arquivo .obj para ver como os tipos diferem.

LNK4227 também é usado para relatar problemas originados com outra ferramenta. Procure mais informações na mensagem de aviso.

Os problemas de metadados precisam ser corrigidos para resolver o aviso.

Exemplos

LNK4227 é gerado quando um assembly referenciado foi assinado de maneira diferente do assembly que faz referência a ele.

O seguinte exemplo gera o erro LNK4227:

// LNK4227.cpp
// compile with: /clr
using namespace System::Reflection;

[assembly:AssemblyDelaySignAttribute(false)];

int main() {}

e, em seguida,

// LNK4227b.cpp
// compile with: /clr LNK4227.cpp /FeLNK4227b.exe
using namespace System::Reflection;
using namespace System::Runtime::CompilerServices;

[assembly:AssemblyDelaySignAttribute(true)];
// Try the following line instead
// [assembly:AssemblyDelaySignAttribute(false)];

ref class MyClass
{
};

LNK4227 também pode ser gerado quando números de versão no formato errado são passados para atributos de assembly. A notação '*' é específica do AssemblyVersionAttribute. Para resolver esse aviso, use apenas números nos atributos de versão que não sejam AssemblyVersionAttribute.

O seguinte exemplo gera o erro LNK4227:

// LNK4227e.cpp
// compile with: /clr /LD /W1
using namespace System::Reflection;
[assembly:AssemblyVersionAttribute("2.3.*")];   // OK
[assembly:AssemblyFileVersionAttribute("2.3.*")];   // LNK4227
// try the following line instead
// [assembly:AssemblyFileVersionAttribute("2.3")];