.NET Framework 4.5 のインストールにより Visual Studio 2010 が起動するビルドツールが 64 bit 版に変化する場合がある

現象

.NET Framework 4.5 をインストールすることで、Visual Studio 2010 が起動するコマンド・ツール ( msbuild.exe, lc.exe など) が 32 bit 版から 64 bit 版に変更される場合があります。


64 bit版の Windows に Visual Studio 2010 をインストールした前提で以下のシナリオを考えます。
・ .NET Framework 4.5 をインストールします。
・ x64 をターゲットとしたプロジェクトをビルドします。
このとき、Visual Studio 2010 の IDE から起動されるコマンド・ツール (msbuild.exe, lc.exe など) は 32 bit 版ではなく、64 bit版になります。
.NET 4.0 がインストールしてある場合には、同じ条件下において32 bit 版のコマンド・ツールが起動されます。

原因

.NET Framework 4.5 では、msbuid.exe が 32 bit, 64 bit 版にかかわらず、そこから起動できるコマンド・ツールのビットを選択できるようになりました。
また、x64 ターゲットのプロジェクトに対して x64 ツールが利用できる場合には、それまでの 32 bit 版のツールを利用するのではなく 64 bit版の x64ツールでビルドを行うようにしました。 これは意図した変更であり、同じビットのツールを利用するほうがより適切であるという仮定によるものです。

解決方法

一般に 32 bit, 64 bit いずれのビルドツールを用いた場合においても生成される結果に影響はないため、上記の変更を意識する必要はありません。

上記の変更により影響を受けるプロジェクトがある場合 (ビルドするプロジェクトのターゲットプラットフォームは x64 であるが、32 bit 版 のビルドツールを起動する必要がある場合など) には、環境変数またはプロジェクトファイル (.vbproj または .csproj) にて、「DisableOutOfProcTaskHost」の値に「1」に設定します。

DisableOutOfProcTaskHost は 32 bit のビルドツールである Visual Studio の IDE である devenv.exe から 64 bit の ビルドツール msbuild.exe を起動するという機能を抑止します。このことにより、.NET Framework 4.0 がインストールされている環境と同様に、32 bit 版のツールを起動することが可能です。

プロジェクト毎に設定を行う場合は、プロジェクトファイルの <PropertyGroup> 要素に <DisableOutOfProcTaskHost>1</DisableOutOfProcTaskHost> を追加します。

全てのプロジェクトに対して設定を行う場合は、環境変数に DisableOutOfProcTaskHost を追加し、「1」を設定します。
環境変数は、[コントロールパネル] - [システム] - [詳細設定] - [環境変数]から設定します。ユーザの環境変数の場合にはログオフ・ログオン後に、システムの環境変数に設定する場合には、コンピュータの再起動後から有効になります。


プロパティ

文書番号:2783939 - 最終更新日: 2016/09/29 - リビジョン: 1

Microsoft .NET Framework 4.5, Microsoft Visual Studio 2010 Premium with MSDN, Microsoft Visual Studio 2010 Professional, Microsoft Visual Studio 2010 Ultimate

フィードバック