Team Foundation Serviceで既存プロジェクトのビルドをする方法 #tfsug

まだテストが通っていませんが(=テストプロジェクトは削除済)、ビルドまで通ったので、Visual Studio 2010で作成しているプロジェクトを Team Foundation Serviceでビルドするまでに行った手順をまとめます。

環境

  • Visual Studio 2010
  • Windows 7
  • Team Foundation Service
  • オンプレミスのサーバー上で起動させているJenkinsでCIを実施
  • Nuget でDLLを取得している

エラーへの対処法

Unable to copy file “ServiceDefinition.csdef” to “ServiceDefinition.build.csdef”. Access to the path ‘ServiceDefinition.build.csdef’ is denied.

原因:ServiceDefinition.build.csdefはビルド時に生成されるものなので、リポジトリにチェックインされているとビルド時に上記エラーが発生する

対応:対象ファイルをリポジトリから削除してビルドする

The type or namespace name ‘xxxx’ could not be found (are you missing a using directive or an assembly reference?)

原因:ローカル環境の .NET Framework(4.0 から4.5にアップデートしている)と TFService上の.NET Framework(4.5
)のヴァージョンが異なっているため、namespaceエラーが発生する

対応:namespaceをTFService上の.NET Frameworkのnamespaceに変更する

The type or namespace name ‘xxxx’ does not exist in the namespace ‘System.Data.Entity’ (are you missing an assembly reference?)

原因:Nugetで参照していたDLLが参照できないため

対応

  • ソリューションエクスプローラーのソリューションの上で右クリックして表示される[Nugetパッケージ復元の有効化]をクリックする
  • Visual Studioで[ツール]->[オプション]->[パッケージマネージャー]->[ビルド中に足りないパッケージをダウンロードすることをNuGetに許可]にチェックを入れる

原因:上記項目のNugetの設定で、プロジェクト配下にある「packages.config」に記述されているDLLを取得しているが、packages.configに必要なパッケージが記述されていないと、参照不足のエラーが発生する

対応

  • ビルドログでエラー箇所を確認し、エラー箇所の直前の、Nugetでパッケージを取得している箇所(Resotre Packages:と書かれている部分)を確認する
  • どのプロジェクトのpackages.configを参照しているかが表示されているので、該当プロジェクトのpackages.configに必要なパッケージの情報を記述する
  • JenkinsのCIでは、プロジェクトのビルドの順番を細かく設定していたのでエラーが発生していなかった

MSBuild引数エラー

原因:MSBuildへの引数が設定されていない

対応

  • ビルド定義の[プロセス]タブをクリックする
  • [1. ビルドする項目]の[ビルドする構成]を[Mixed Platforms]にする
  • [4. 詳細設定]の[MSBuild 引数]にJenkinsで設定しているMSBuildへの引数を設定する