Partager via


Avertissement des outils Éditeur de liens LNK4227

Avertissement de l’opération de métadonnées (HRESULT) : warning_message

L’éditeur de liens a détecté des différences de métadonnées lors de la fusion :

  • Un ou plusieurs assemblys référencés avec l’assembly en cours de génération.

  • Un ou plusieurs fichiers de code source dans une compilation.

Par exemple, LNK4227 peut être provoqué si vous avez deux fonctions globales portant le même nom, mais que les informations de paramètre déclarées différemment (autrement dit, les déclarations ne sont pas cohérentes dans toutes les compilations). Utilisez ildasm.exe /TEXT /METADATA object_file sur chaque fichier .obj pour voir comment les types diffèrent.

LNK4227 est également utilisé pour signaler des problèmes qui proviennent d’un autre outil. Recherchez le message d’avertissement pour plus d’informations.

Les problèmes de métadonnées doivent être résolus pour résoudre l’avertissement.

Exemples

LNK4227 est généré lorsqu’un assembly référencé a été signé différemment de l’assembly qui le référence.

L’exemple suivant génère des LNK4227 :

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

[assembly:AssemblyDelaySignAttribute(false)];

int main() {}

Et puis

// 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 pouvez également être généré lorsque les numéros de version dans le format incorrect sont passés aux attributs d’assembly. La notation '*' est spécifique au AssemblyVersionAttribute. Pour résoudre cet avertissement, utilisez uniquement des nombres dans les attributs de version autres que AssemblyVersionAttribute.

L’exemple suivant génère des 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")];