チームのビルドサーバーのセットアップに取り組んでいます。
背景
Microsoft Visual Studio 2010 Ultimate を使用しています。当社の製品には、C# コード (主に)、外部 DLL および C コードが含まれています。.Net 4.0 を使用しており、70 以上のプロジェクトがあります。
コードの 3 つのブランチで作業しています。
- プロダクションブランチ(現在リリースされているもの)
- テスト ブランチ (ホット フィックス、バグ フィックス、エンド ユーザー テスト)
- 開発ブランチ(新機能の追加)
すべてのブランチは TF ソース管理下にあります。
目標
私たちが望むのは、1 日 1 回、すべてのブランチのすべての単体テストをビルドして実行するビルド サーバーを用意することです。ビルド サーバーはソース管理のコードを使用する必要があります。私たちの目標は、高速な標準エラー検出を行うことです。ビルド サーバーの保守をほとんどまたはまったく行わないことをお勧めします。
buildserver が生成するビルドを使用するつもりはありません。必要なのは、build server を使用して、ブランチのビルドと単体テストを継続的に行うことだけです。
セットアップ
内容 現在、2 つのビルド定義がセットアップされています。1 つはテスト ブランチ用で、もう 1 つは開発ブランチ用です。どちらのビルド定義もソース管理からコードを取得します (その部分は問題なく動作します)。始まります。
問題
Test Branche は、単体テストを正常にビルドして実行できます。
開発ブランチは、(または 5 つのような) エラーのためにビルドできません:
The type or namespace name 'XXX' does not exist in the namespace 'YYY' (are you missing an assembly reference?)
エラーは、プロジェクト X がプロジェクト Y を参照している場合です。プロジェクト X と Y はどちらも C# .Net 4.0 プロジェクトであり、両方を完全に制御できます。X と Y の両方が DLL にコンパイルされます。プロジェクト Y には、プロジェクト X のクラスが実装しているインターフェイスが含まれています。
厄介な詳細は、プロジェクト X または Y のテスト ブランチと開発ブランチに違いがないことです。2 つのプロジェクトは、過去 3 か月間完全に同一でした。
問題は、なぜテスト ブランチでは機能するのに、開発ブランチでは機能しないのですか?
私はテストしました:
- プロジェクトは互いに正しく参照されています。- 3 つのブランチはすべて、私自身/同僚の開発マシンでビルドしても問題ありません (5 つの異なるマシンでテストしました)。- X プロジェクト全体を削除して再作成しようとしましたが、うまくいきませんでした。- Y プロジェクト全体を削除して再作成しようとしましたが、うまくいきませんでした。- プロジェクト X プロジェクトとそのクラスの名前空間を変更しようとしましたが、うまくいきませんでした。- プロジェクト Y プロジェクトとそのクラスの名前空間を変更しようとしましたが、うまくいきませんでした。- (開発マシンを再起動したことさえあります) - すべての変更は、ビルドサーバーがビルドに設定された後のソース管理に常にチェックインされています。
ログファイルを掘り下げていて、いくつかの興味深い詳細を見つけた追加
情報。これは、開発ブランチでのプロジェクト X のビルドの詳細です。
Task "AssignProjectConfiguration"
Project reference "..\..\A" has been assigned the "Debug|x86" configuration.
Project reference "..\..\Y" has been assigned the "Debug|x86" configuration. (can see there is a project Y)
Project reference "..\..\B" has been assigned the "Debug|x86" configuration.
しかし、タスク「ResolveAssemblyReference」で
Task "ResolveAssemblyReference"
TargetFrameworkMoniker:
.NETFramework,Version=v4.0
TargetFrameworkMonikerDisplayName:
.NET Framework 4
TargetedRuntimeVersion:
v4.0.30319
Assemblies:
System
System.Xml.Linq
System.Data.DataSetExtensions
Microsoft.CSharp
System.Data
System.Xml
System.Core
AssemblyFiles:
C:\Builds\1\A
C:\Builds\1\B
(----- Missing project Y -----)
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll
同じタスクのテスト ブランスの場所
Task "ResolveAssemblyReference"
TargetFrameworkMoniker:
.NETFramework,Version=v4.0
TargetFrameworkMonikerDisplayName:
.NET Framework 4
TargetedRuntimeVersion:
v4.0.30319
Assemblies:
System
System.Data.Entity
System.Xml.Linq
System.Data.DataSetExtensions
Microsoft.CSharp
System.Data
System.Xml
System.Core
AssemblyFiles:
C:\Builds\1\A
C:\Builds\1\B
C:\Builds\1\Y (There it is)
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll
そのため、何らかの理由で、プロジェクト X からプロジェクト Y への参照を単に「忘れる」ように感じます。
ヘルプ