kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

TFSサーバービルド時にMicrosoft.Bcl.Build.Targetsがないといわれる場合の対処

※:この現象が発生するのはTFSにNuGetパッケージ(packagesフォルダ配下にある大量のファイル)をチェックインしていない場合です。つまり、これをやっている場合。
ASP.NET でソース管理システムへの NuGet パッケージのコミットを不要とする - THE TRUTH IS OUT THERE - Site Home - MSDN Blogs
packagesフォルダ配下をチェックインせず、サーバービルドを行うと、こんなエラーが出て失敗します。

これはビルドの都合の制限っぽいようで、workaroundが出ています。
NuGet Package Restore Issues - .NET Blog - Site Home - MSDN Blogs
対処方法は以下のいずれか。私は前者の方法でビルドできることを確認しました。どちらにしてもちょっと…ですが、これはどうしようもないのか。

プロジェクトファイルの書き換え

プロジェクトファイル(csproj/vbproj)を以下のように書き換える(拡張機能いれていれば右クリックからVS内部でEdit Projectで編集できます)。

(変更前)

(変更後)

ただ、これはMicrosoft.Bclが更新されると、またプロジェクトファイル書き換えないといけないのでダサいです。

ビルド前にNuGetを実行する

nuget.exe install .\プロジェクト名\packages.config

プロジェクトのプロパティの「ビルドイベント」に「ビルド前に実行するコマンド」があるので、そこに書いてしまえばいいはずです。
(8/24追記)
NuGet 2.7でこの回避策は不要になりました。こちらも見てください。
NuGet 2.7で改善されるTFSサーバービルド - 新日々此何有哉