TFS2012自動ビルドでデプロイすると「'managedRuntimeVersion' プロパティが 'v4.0' に設定されています。このアプリケーションには 'v4.5' が必要です。」への対応方法 #tfsug

IIS8.0に.NET Framework 4.5 のアプリケーションをデプロイしようとしたらうまくいかなかったのでメモ。

環境

現象

TFS2012からの自動ビルドでIIS8.0に ASP.NET MVC 4アプリケーションをデプロイしようとしたら以下のエラーが表示されます。
自動ビルドに設定した内容は過去エントリ(TFSの自動ビルドでWebアプリのデプロイ、配布パッケージの作成を同時に行う #tfsug - kaji_3's blog)参照。

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets (3847): Web 配置タスクに失敗しました。(使用しようとしているアプリケーション プールでは、'managedRuntimeVersion' プロパティが 'v4.0' に設定されています。このアプリケーションには 'v4.5' が必要です。)

解析

ただし、Visual Studio 2012 の発行ウィザードでデプロイすると成功し、TOP画面が表示されます。また、Web Deploy用発行パッケージを作成してバッチでデプロイした場合も成功します。

TFSからの自動ビルド時のデプロイにはMSBuildの引数オプションの「/p:DeployOnBuild=True」を利用しているため、MSBuild固有の問題ではないかと推測します。

対応

色々検索して、VisualStudio2010から2012にアップグレードしたらデプロイできなくなった方がいました。
MSBuild deploy failing after upgrade to .NET 4.5 - Stack Overflow
そこで紹介されているエントリを参考にします。
Sayed Ibrahim Hashimi - MSBuild, C#, Visual Studio, Training, and more - Visual Studio project compatability and VisualStudioVersion

どうやら、Visual Studio 2010 をインストールしている環境で Visual Studio 2012 をインストールすると、MSBuildの targetの定義ファイルがVS2010の方を参照してしまうようです。
なので、VS2012を参照するよう以下のオプションを

ビルド定義→プロセス→ビルドプロセスパラメータ→MSBuild引数に、

/p:VisualStudioVersion=11.0

を追加します。これでオッケー!!