16

環境: Visual Studio 10, CLR/CLI Class Libraryで構築されたプロジェクト、Platform Toolset v100フレームワーク バージョン を対象としていv3.5ます。

この質問はすでにここで尋ねられていることは承知していますが、私の場合の問題を解決する答えが見つからなかったため、もう一度取り上げます。

プロジェクトのビルド中にCLR/CLI Class Library (DLL)、リンカーが次のエラーで失敗します。

MSVCMRT.lib(managdeh.obj) : error LNK2022: metadata operation failed (80131195) : Custom attributes are not consistent: (0x0c0000f7).
MSVCMRT.lib(managdeh.obj) : error LNK2022: metadata operation failed (80131195) : Custom attributes are not consistent: (0x0c0000fb).
MSVCMRT.lib(msilexit.obj) : error LNK2022: metadata operation failed (80131195) : Custom attributes are not consistent: (0x0c000128).
MSVCMRT.lib(msilexit.obj) : error LNK2022: metadata operation failed (80131195) : Custom attributes are not consistent: (0x0c00012c).
MSVCMRT.lib(puremsilcode.obj) : error LNK2022: metadata operation failed (80131195) : Custom attributes are not consistent: (0x0c0000ee).
MSVCMRT.lib(puremsilcode.obj) : error LNK2022: metadata operation failed (80131195) : Custom attributes are not consistent: (0x0c0000f1).
LINK : fatal error LNK1255: link failed because of metadata errors
4

3 に答える 3

40

途中で学んだもう 1 つのことは、との値を混在させることはできないということです。Platform ToolsetTarget Framework Version

私が見つけた可能な組み合わせ:

.NET 3.5 以下:

  • Platform Toolset: v90Visual Studio 2008 、ランタイム バイナリを使用します。
  • TargetFrameworkVersion: v3.5 (またはそれ以下)、
  • プリプロセッサでは、_WIN32_WINNT定義することができます (例_WIN32_WINNT=0x0500)

.NET 4.0 以降:

  • Platform Toolset: v100Visual Studio 2010 、ランタイム バイナリを使用します。
  • TargetFrameworkVersion: v4.0 (またはそれ以降)、
  • プリプロセッサでは、'_WIN32_WINNT=0x0500' を定義してはいけません

これらの値を定義する方法:

  1. Platform Toolset– 以下にあります: プロジェクト設定 | 全般的、
  2. TargetFrameworkVersion- プロジェクトをアンロードし、アンロードされたプロジェクトを右クリックして [編集] を選択します。「*.*proj」ファイルが開いたら、次の行を変更します。<TargetFrameworkVersion>v3.5<TargetFrameworkVersion/>
于 2013-09-08T06:52:13.100 に答える
0

Windows のバージョンを設定するいくつかのコンパイル ユニットにいくつかのヘッダー ファイルがありました。

#define _WIN32_WINNT 0x0501

問題は、その変数を設定しなかった他のコンパイル ユニット (c++ ファイル)にあったためerror LNK2022、同じ構造体が複数のコンパイル ユニット (異なる cpp ファイル) で異なる方法でコンパイルされていると不平を言っています。

したがって、_WIN32_WINNT定義を解除することはできないため、私の解決策は以前に提案されたものとはまったく逆でした。

プロジェクト全体に設定しただけなので、すべてのコンパイル単位が同じようにコンパイルされます。
プロジェクトのプロパティ -> C/C++ -> プリプロセッサ -> プリプロセッサの定義

_WIN32_WINNT=0x0501;
于 2016-05-02T12:05:28.457 に答える