リンカー ツールの警告 LNK4227

メタデータ演算警告 (HRESULT) : warning_message

次のマージを行うときに、リンカーによってメタデータの違いが検出されました。

  • 1 つ以上の被参照アセンブリと、現在ビルド中のアセンブリ。

  • コンパイル内の 1 つ以上のソース コード ファイル。

たとえば、同じ名前の 2 つのグローバル関数があるが、パラメーター情報の宣言が異なっている (つまり、すべてのコンパイル単位で宣言が一貫していない) 場合、LNK4227 が発生する可能性があります。 型がどのように異なっているかを確認するには、各 .obj ファイルに対して ildasm.exe /TEXT /METADATA object_file を使用します。

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