Freigeben über


Linkertoolwarnung LNK4227

Metadatenvorgangswarnung (HRESULT): warning_message

Bemerkungen

Der Linker hat beim Zusammenführen Metadatenunterschiede erkannt:

  • Mindestens eine Assembly, auf die verwiesen wird, wobei die Assembly gerade erstellt wird.

  • Eine oder mehrere Quellcodedateien in einer Kompilierung.

Beispielsweise kann LNK4227 verursacht werden, wenn Sie zwei globale Funktionen mit demselben Namen, aber Parameterinformationen unterschiedlich deklariert haben (d. a. Deklarationen sind in allen Kompilands nicht konsistent). Verwenden Sie ildasm.exe /TEXT /METADATA object_file für jede .obj Datei, um zu sehen, wie sich die Typen unterscheiden.

LNK4227 wird auch verwendet, um Probleme zu melden, die mit einem anderen Tool stammen. Suchen Sie nach der Warnmeldung, um weitere Informationen zu finden.

Die Metadatenprobleme müssen behoben werden, um die Warnung zu beheben.

Beispiele

LNK4227 wird generiert, wenn eine referenzierte Assembly anders signiert wurde als die Assembly, die darauf verweist.

Im folgenden Beispiel wird LNK4227 generiert:

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

[assembly:AssemblyDelaySignAttribute(false)];

int main() {}

Und dann

// 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 können auch generiert werden, wenn Versionsnummern im falschen Format an Assemblyattribute übergeben werden. Die Schreibweise '*' ist spezifisch für die AssemblyVersionAttribute. Verwenden Sie zum Beheben dieser Warnung nur Zahlen in den anderen Versionsattributen als AssemblyVersionAttribute.

Im folgenden Beispiel wird LNK4227 generiert:

// 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")];