Я работаю над настройкой билдсервера для нашей команды.
История вопроса
Мы используем Microsoft Visual Studio 2010 Ultimate. Наш продукт содержит код C#(,в основном), внешние библиотеки DLL и код C. Мы работаем с.Net 4.0 и имеем более 70 проектов.
Мы работаем с 3 ветвями нашего кода:
Все ветки находятся под контролем источника TF.
Цель
Мы хотим, чтобы сервер сборки собирал и запускал все модульные тесты для всех ветвей один раз в день, сервер сборки должен использовать код в системе управления версиями. Наша цель — обеспечить быстрое обнаружение стандартных ошибок. Мы предпочли бы как можно меньше поддержки сервера сборки.
Мы не собираемся использовать сборки, производимые сервером сборки, все, что мы хотим, — это использовать сервер сборки для непрерывной сборки и модульного тестирования наших веток.
Что настроено
В настоящее время настроено два определения сборки, одно для тестовой ветки и одно для ветки разработки, оба определения сборки берут код из системы управления версиями(эта часть работает все хорошо ), но вот тут и начинается самое интересное.
Проблема
Ветвь тестирования может создавать и запускать модульные тесты без проблем.
Ветвь разработки не может выполнить сборку из-за (или около 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. Эти два проекта были полностью идентичны последние 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
Где в Test Brance для той же задачи
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.
Справка