Udostępnij przez


Ostrzeżenie LNK4227 narzędzi konsolidatora

ostrzeżenie dotyczące operacji metadanych (HRESULT): warning_message

Uwagi

Konsolidator wykrył różnice metadanych podczas scalania:

  • Co najmniej jeden zestaw, do którego odwołuje się obecnie zestaw, jest kompilowany.

  • Co najmniej jeden plik kodu źródłowego w kompilacji.

Na przykład LNK4227 mogą być spowodowane tym, że masz dwie funkcje globalne o tej samej nazwie, ale informacje o parametrach zadeklarowane inaczej (czyli deklaracje nie są spójne we wszystkich wierszach). Użyj ildasm.exe /TEXT /METADATA object_file w każdym pliku .obj, aby zobaczyć, jak typy się różnią.

LNK4227 służy również do zgłaszania problemów pochodzących z innego narzędzia. Wyszukaj komunikat ostrzegawczy, aby uzyskać więcej informacji.

Aby rozwiązać problem z ostrzeżeniem, należy rozwiązać problemy z metadanymi.

Przykłady

LNK4227 jest generowany, gdy zestaw, do którego odwołuje się odwołanie, został podpisany inaczej niż zestaw, do którego się odwołuje.

Poniższy przykład generuje LNK4227:

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

[assembly:AssemblyDelaySignAttribute(false)];

int main() {}

a następnie,

// 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 można również wygenerować, gdy numery wersji w niewłaściwym formacie są przekazywane do atrybutów zestawu. Notacja "*" jest specyficzna dla .AssemblyVersionAttribute Aby rozwiązać ten problem, użyj tylko liczb w atrybutach wersji innych niż AssemblyVersionAttribute.

Poniższy przykład generuje 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")];