Sdílet prostřednictvím


Upozornění linkerů LNK4227

upozornění operace metadat (HRESULT): warning_message

Linker zjistil rozdíly mezi metadaty při slučování:

  • Jedno nebo více odkazovaných sestavení s sestavením, které se právě sestavuje.

  • Jeden nebo více souborů zdrojového kódu v kompilaci.

Například LNK4227 může být způsobeno, pokud máte dvě globální funkce se stejným názvem, ale informace o parametrech deklarovány odlišně (to znamená, že deklarace nejsou konzistentní ve všech compilands). Pomocí ildasm.exe /TEXT /METADATA object_file v každém souboru .obj zjistíte, jak se typy liší.

LNK4227 slouží také k hlášení problémů, které pocházejí z jiného nástroje. Další informace najdete ve zprávě upozornění.

Aby se upozornění vyřešilo, musí být opraveny problémy s metadaty.

Příklady

LNK4227 se vygeneruje, když bylo odkazované sestavení podepsáno jinak než sestavení, které na něj odkazuje.

Následující ukázka vygeneruje LNK4227:

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

[assembly:AssemblyDelaySignAttribute(false)];

int main() {}

a pak,

// 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 lze také vygenerovat, pokud jsou čísla verzí v nesprávném formátu předána atributům sestavení. Notace *je specifická pro AssemblyVersionAttributeznak . Chcete-li toto upozornění vyřešit, použijte pouze čísla v jiných atributech verze než AssemblyVersionAttribute.

Následující ukázka vygeneruje 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")];