Avviso degli strumenti del linker LNK4227
avviso dell'operazione di metadati (HRESULT): warning_message
Il linker ha rilevato differenze di metadati durante l'unione:
Uno o più assembly a cui si fa riferimento con l'assembly in fase di compilazione.
Uno o più file di codice sorgente in una compilazione.
Ad esempio, LNK4227 può essere causato se si dispone di due funzioni globali con lo stesso nome, ma le informazioni sui parametri dichiarate in modo diverso , ovvero le dichiarazioni non sono coerenti in tutte le aree geografiche. Usare ildasm.exe /TEXT /METADATA object_file in ogni file di .obj per vedere in che modo i tipi differiscono.
LNK4227 viene usato anche per segnalare problemi che hanno origine con un altro strumento. Cercare il messaggio di avviso per altre informazioni.
I problemi relativi ai metadati devono essere risolti per risolvere l'avviso.
Esempi
LNK4227 viene generato quando un assembly a cui si fa riferimento è stato firmato in modo diverso rispetto all'assembly che vi fa riferimento.
L'esempio seguente genera LNK4227:
// LNK4227.cpp
// compile with: /clr
using namespace System::Reflection;
[assembly:AssemblyDelaySignAttribute(false)];
int main() {}
E poi
// 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 possono essere generati anche quando i numeri di versione nel formato errato vengono passati agli attributi dell'assembly. La notazione '*' è specifica di AssemblyVersionAttribute
. Per risolvere questo avviso, usare solo i numeri negli attributi della versione diversi da AssemblyVersionAttribute
.
L'esempio seguente genera 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")];