2014-09-25 3 views
1

Мы просто настраиваем контроллер сборки для работы над нашими проектами. Наши проекты зависят от DLL от другого приложения, которое установлено на конце, Я не хочу устанавливать это приложение на сервере сборки, если только не нужно. С этой целью я попытался разместить библиотеки DLL, которые мне нужны, в папку пользовательских сборок, но MSBuild не может найти их там.Могу ли я использовать каталог «Путь контроля версий к пользовательским сборкам» для любых DLL?

Могу ли я использовать папку пользовательских сборок для всех библиотек DLL, которые необходимы мой проект, или это только для библиотек DLL, которые необходимы в процессе сборки? (то есть NUnit, StyleCop)

ответ

5

это только для DLL, что сервер сборки

Для ваших зависимостей вы должны упаковать их в виде пакетов NuGet, и вместо этого ваши проекты будут зависеть от этого. Это позволит разрешить эти DLL на любой машине, даже если у них нет установленных битов.

Вы можете использовать UNC-путь как ваш репозиторий nuget или ProGet, который является бесплатным.

+0

Вот о чем я думал. Спасибо за подтверждение! –

2

Чтобы добавить некоторые детали к вышеуказанному ответу, папка пользовательских сборок была функцией, введенной в TFS2010, в инфраструктуру Build, которая будет автоматически копировать DLL, проверенные на управление версиями, на машины Build (контроллер/агент). Эта функциональность была добавлена ​​для того, чтобы разработчикам процессов пользовательской сборки не приходилось посещать каждую машину сборки для развертывания пользовательских действий.

Теперь все библиотеки DLL, скопированные в папку пользовательских сборок, будут развернуты на машинах сборки - ДА, но все они будут созданы или загружены в используемую память - НЕТ. В память будут загружены только классы со следующим атрибутом BuildActivityAttribute.

Если ваш пользовательский класс сборки деятельность не помеченный BuildActivityAttribute то определение сборки не будет в состоянии обнаружить его, в этом случае он будет бросать ошибку ниже:

"TF21509:An error occured while initializing a build definition \CustomBuildTasks\BuildName:Cannot create 
unknown type '{clr-namepace:NamespaceName,asembly=AssemblyName}Activityname'." 

или если пользовательская сборка использует зависимую сборку (ссылку), которая необходима для запуска действий, они не будут загружаться должным образом. Если это так, вы получите ошибки «неизвестного типа» при инициализации определения сборки.

Чтобы обойти эту проблему, добавьте поддельный CodeActivity к вашей зависимой сборке со следующим классом контекстного атрибутом:

[Microsoft.TeamFoundation.Build.Client.BuildActivity(Microsoft.TeamFoundation.Build.Client.HostEnvironmentOption.All)] 
Public sealed class FakeActivity : CodeActivity 

Наконец это путь, где DLL файлы будут загружено на строительных машинах:

TFS Постройте Агенты

Windows XP, 2003 
C:\Documents and Settings\[Build Service User]\Local Settings\Temp\BuildAgent\[Agent ID] 
C:\Documentsand Settings\[Build Service User]\Local Settings\Temp\BuildController\[Controller ID] 

Windows 7,2008,.... 
C:\Users\[Build Service User]\AppData\Local\Temp\BuildAgent 
C:\Users\[Build Service User]\AppData\Local\Temp\BuildController 

Ссылки:

SOURCE 1

SOURCE 2

SOURCE 3

SOURCE 4

SOURCE 5