3

.NET 2.0 C++/CLI プロジェクトを VS2008 から VS2012 に移行しようとしています。変換後、プロジェクトは 4.0 に依存します。私がするとき

<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

プロジェクトは 2.0と4.0に依存します。ソリューション エクスプローラーで External Dependencies マジック フォルダーを調べて、それを確認します。また、2.0 C# プロジェクトでプロジェクトを参照すると、コンパイラの警告が表示されます。

#includes をコメントアウトすると、vcclr.h や atlbase.h などの Microsoft ヘッダーの #using ディレクティブによって 4.0 の依存関係が取り込まれていることがわかります。

それらが提供するクラスと関数には、これらのヘッダーが必要です。それらの #using ディレクティブが mscorlib.dll の 4.0 ではなく 2.0 バージョンを指すようにするにはどうすればよいですか?

4

2 に答える 2

4

を変更する<TargetFrameworkVersion>だけでは不十分です。ビルド ツールは、マシンにインストールされている .NET 4 バージョンを引き続き使用します。生成されたアセンブリで ildasm.exe を実行すると、何かを確認できます。マニフェストをダブルクリックして表示します。

// Metadata version: v4.0.30319
...
.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .hash = (DD 9E C9 8D BF 2A 2D C2 AA 2D C3 8B 51 CD 4C A6   // .....*-..-..Q.L.
           15 F0 22 F6 )                                     // ..".
  .ver 2:0:0:0
}
...
.assembly extern mscorlib as mscorlib_4
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .hash = (47 6E C0 E3 BA CD CE B1 9A 4D 68 BE 29 75 61 6F   // Gn.......Mh.)uao
           BE 04 C6 BA ) 
  .ver 4:0:0:0
}

mscorlib.dll の両方のバージョンが依存関係になったことに注意してください。発生した問題。

リンクしたフィードバック記事では、ツールセットを「v90」に変更することを推奨していました。ただし、VS2008 がインストールされていても、これは私のマシンでは機能しません。オプションがコンボボックスのドロップダウンに表示されず、強制すると次のビルド エラーが発生します。

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.Cpp.Platform.targets(43,5): エラー MSB8020: Visual Studio 2008 のビルド ツール (プラットフォーム ツールセット = 'v90 ') 見つからない。v90 ビルド ツールを使用してビルドするには、[プロジェクト] メニューをクリックするか、ソリューションを右クリックして [VC++ プロジェクトの更新...] を選択します。Visual Studio 2008 ビルド ツールを使用してビルドするには、Visual Studio 2008 をインストールします。

エラーメッセージで与えられたアドバイスに従って、私はこれを得ます:

------ Update VC++ projects started -------
Updating project 'ConsoleApplication74'...
    Configuration 'Debug|Win32': changing Platform Toolset to 'v110' (was 'v90').
    Configuration 'Release|Win32': no update required. Platform Toolset is 'v110'.
    TargetFrameworkVersion = v4.5 (was v2.0)

振り出しに戻って。VS2012 を使用した C++/CLI プロジェクトで .NET 2.0 をターゲットにすることは、失われた原因だと思います。

于 2013-04-29T20:48:35.047 に答える