Предупреждение средств компоновщика LNK4227

Предупреждение об операции метаданных (HRESULT) : warning_message

Компоновщик обнаружил различия метаданных при слиянии:

  • Одна или несколько ссылочных сборок с сборкой, созданной в настоящее время.

  • Один или несколько файлов исходного кода в компиляции.

Например, LNK4227 могут быть вызваны, если у вас есть две глобальные функции с одинаковым именем, но сведения о параметрах, объявленные иначе (то есть объявления не согласованы во всех компиляторах). Используйте ildasm.exe /TEXT /METADATA object_file в каждом OBJ-файле, чтобы узнать, как отличаются типы.

LNK4227 также используется для создания отчетов о проблемах, возникающих с помощью другого средства. Найдите предупреждающее сообщение для получения дополнительных сведений.

Чтобы устранить предупреждение, необходимо устранить проблемы с метаданными.

Примеры

LNK4227 создается, когда ссылка на сборку была подписана не так, как сборка, которая ссылается на нее.

Следующий пример создает LNK4227:

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

[assembly:AssemblyDelaySignAttribute(false)];

int main() {}

И потом

// 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 также можно создать, когда номера версий в неправильном формате передаются атрибутам сборки. Нотация "*" зависит от AssemblyVersionAttribute. Чтобы устранить это предупреждение, используйте только номера в атрибутах версии, отличных от AssemblyVersionAttribute.

Следующий пример создает 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")];