kkamegawa's weblog

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

NuGet 2.7で改善されるTFSサーバービルド

TFSサーバービルド時にMicrosoft.Bcl.Build.Targetsがないといわれる場合の対処 - 新日々此何有哉
こんな記事をかいたら翌日にNuGet 2.7がリリースされて、存在価値がなくなりました(涙)。一言で言えば、この回避策が全く必要なくなっています。
NuGet 2.7以前ではパッケージマネージャーのところはこういう状態でした。

NuGet 2.7以降はこんな風にチェックが一つ増えて、「足りないものは自動的にとってくるぜ」がデフォルトになります。

これで記事の回避策は必要なくなります(涙)。でも、順を追って一つずつやりましょう。相変わらずNuGetパッケージを使うソリューションを最初にTFSに登録するまではちょい面倒ですけどね。

ASP.NET MVC4アプリケーションを作って、TFSに一度チェックインします。チェックイン後、TFSのサーバービルドを実行してみます。

成功しますね。で、packagesフォルダ配下のrepositories.configというファイル「以外を」ざっくりTFSの管理から削除します。
(今気づいたんですが、最初にチェックインする前にpackagesフォルダのrepositories.configというファイル以外はざっくり消してからチェックインしちゃってもいいはず。なければとってきますしね)

自動ビルドが走りますが、これは失敗します。なぜかといえば、ソリューションの設定で復元の有効化をチェックしていないから。

最初に紹介した「自動的にとってくる」という設定とNuGetパッケージの復元は別みたいですね。別に一緒でもいいじゃないかと思うのですが。

次はNuGetパッケージが古いので(jQueryとか1.8.2だし)、いつも通り最新版に更新します。

いくつかの更新を行うと、以前のバージョンのパッケージを削除してから新しいものを登録しようとします。たとえばcontentフォルダの配下や、Areasフォルダの配下はこのせいでソースコード管理から外れることがあります。
@ITの記事でも書きましたが、削除されたものをコミットした後、改めてソースコード管理に手動で追加する必要がありますので気を付けてください。
連載:いまどきのソース・コード管理:第4回 TFSにおける自動ビルドの実践活用ポイント (2/2) - @IT
TFSの拡張機能を入れていれば、どのファイルがソースコード管理から外れているか、Explorerでみやすいので、お勧めです。

たとえば、上記のキャプチャだとjquery.ui.menu.cssjquery.ui.spinner.css,jquery.ui.tooltip.css以外のファイルは追加されていないことがわかります(ファイルのアイコンが緑色になっているものが追加されている状態)。

ソース管理エクスプローラーからフォルダを選んで、「ファイルを追加」でこんな風に一気に追加できます。忘れずに追加したいファイルを選択状態にしてください。

全部追加したあとのビルドでは問題なく出来上がるはずです。

おまけ。packages.configを見ると、NuGet 2.6までにあったMicrosoft.BclやMicrosoft.Bcl.Buildといった拡張機能が登録されていませんね。おそらくNuGet自身が依存するようにしたんじゃないでしょうか。なので、最初に紹介した通り、プロジェクトファイルを修正するような回避方法は不要になっています。