redwarrior’s diary

C#, ASP.NET, WEB, G*などの雑多な情報

TFS 2015のXAMLビルドでNuGetの復元を行わない設定をしたらビルドが超速く終わるようになった

メモ:TFS 2017は、NuGetサーバーをローカルで建てることが出来るらしいので、そちらを使った方がディスク容量の節約になると思いますし、そちらを使いましょう。

TFS 2015から新しいビルド方式が用意されて、TFS 2017もリリースされ、今後あまり使われなくなっていくと思われるXAMLビルドですが、自動ビルド&デプロイの方法を確立した事もあり、しばらく使い続けることになりそうです。

TFS 2015上のXAMLビルドで、形として残していなかったノウハウがあったので、備忘録として残しておきます。

環境

困っていた事

作成したプロジェクトをTFS上でビルドする時に、NuGetによる復元が毎回発生してしまいビルドが上手くいきません。

Windows Server自体は外部と通信できるが、NuGetクライアントが外部通信するためには設定が必要でした。

NuGetサーバーを内部に建てるという方法もあったと思うが、空いているサーバーもなくやり方がわかりませんでした。

対応した内容(概要)

まず、リポジトリの容量が増えても良いので、プロジェクトに全てのパッケージを含めました。

しかし、NuGetによる復元で外部接続が発生し、タイムアウトするまでプロジェクトの内のパッケージを参照しないため、ビルドに約1時間近くかかってしまっていました。

そこでビルド プロセス テンプレートをカスタマイズして、NuGetによる復元をオフにしたところ、1時間かかっていたビルドを1分に短縮することが出来ました。

ビルド プロセス テンプレートのカスタマイズ方法

ビルド プロセスのカスタマイズ | Microsoft Docs

上記の「ビルド プロセス テンプレートのカスタマイズ」リンク先ページに手順がのっていますが、その通りにはやらずに以下の手順でやりました。

  1. ビルド定義のプロセスメニューから、ビルドプロセステンプレート(GitTemplate.12.xaml)をダウンロード
  2. ダウンロードしたファイルの名前を「GitTemplate.NotRestore.xaml」に変更
  3. プロジェクトの直下に保存して、ソリューションエクスプローラからファイルを追加
  4. 追加したファイルを開くと専用のエディタが開き編集可能になる
  5. エディタ上から「MSBuildの実行」を探す、無い場合は右上の「すべて展開」をクリックすると、表示されるはず。
  6. MSBuildの実行」を選択すると、プロパティウィンドウにプロパティが表示されるのでその中から「RestoreNuGetPackages」を探し、Falseに変更する
  7. 保存してエディタを閉じる

カスタマイズしたテンプレートをビルドに使用する

これで手元での修正が完了しました。次は修正したビルド プロセス テンプレートをTFS上のビルドに使用します。以下の手順でやりました。

  1. 修正したファイルをコミット&プッシュする
  2. ビルド定義のプロセスメニューから、ビルド プロセス ファイルのプルダウンからプッシュしたファイルを選択する(リポジトリサーバー上に無いと表示されない)
  3. 保存する

ビルド完了後に、TFS上からログを参照するとNuGetによる復元が行われていないことが確認できます。

以上です。