Bagikan melalui


LNK4227 Peringatan Alat Linker

peringatan operasi metadata (HRESULT) : warning_message

Linker mendeteksi perbedaan metadata saat menggabungkan:

  • Satu atau beberapa rakitan yang dirujuk dengan rakitan yang saat ini sedang dibangun.

  • Satu atau beberapa file kode sumber dalam kompilasi.

Misalnya, LNK4227 dapat disebabkan jika Anda memiliki dua fungsi global dengan nama yang sama tetapi informasi parameter dinyatakan berbeda (artinya, deklarasi tidak konsisten di semua kompilasi). Gunakan ildasm.exe /TEXT /METADATA object_file pada setiap file .obj untuk melihat perbedaan jenisnya.

LNK4227 juga digunakan untuk melaporkan masalah yang berasal dari alat lain. Cari pesan peringatan untuk informasi lebih lanjut.

Masalah metadata harus diperbaiki untuk menyelesaikan peringatan.

Contoh

LNK4227 dihasilkan ketika rakitan yang direferensikan ditandatangani secara berbeda dari rakitan yang mereferensikannya.

Sampel berikut menghasilkan LNK4227:

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

[assembly:AssemblyDelaySignAttribute(false)];

int main() {}

dan kemudian,

// 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 juga dapat dihasilkan ketika nomor versi dalam format yang salah diteruskan ke atribut assembly. Notasi '*' khusus untuk AssemblyVersionAttribute. Untuk mengatasi peringatan ini, gunakan hanya angka dalam atribut versi selain AssemblyVersionAttribute.

Sampel berikut menghasilkan 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")];