ваш лучший вариант - поместить обычные вещи на машину сборки в $ (MSBuildExtensionsPath), который разрешается в C: \ Program Files \ MSBuild
Мне не нравится идея зависимости от «волшебных» локаций. В конечном итоге вам понадобится 2-е развертывание + процесс контроля качества, чтобы синхронизировать ваши сценарии сборки ...
Только элементы в папке сборки (в TeamBuildTypes) автоматически извлекаются Team Build.
По общему признанию, своего рода хромота, но я не обнаружил, что это является серьезным ограничением на практике. Вот упрощенный взгляд на мою папку TeamBuild:
$/TeamProject
|- Dev
|- Module1
|- Module2
...
Solution1.sln
Solution2.sln
|- TeamBuild
|- 3rdparty
MSBuild.Community.Tasks.dll
MSBuild.Community.Tasks.targets
RandomScriptOffTheWeb1.targets
...
|- SrcSrv
srcsrv.ini
...
|- SymStor
dbghelp.dll
...
Common.targets
TFSBuild.proj
TFSBuild.Common.targets
TFSBuild.Config1.targets
...
UtilityScript1.ps1
...
|- Main
...
|- TeamBuild
...
|- Release
...
Common.targets импортируется всеми файлами * .csproj (etc). Он импортирует все мои сторонние задачи, инициализирует различные глобальные свойства / элементы и устанавливает пути ссылок.
TFSBuild.proj импортирует Common.targets, затем TFSBuild.proj, а затем один из файлов конфигурации, используя $ (BuildDefinition). Таким образом, более конкретные всегда переопределяют задачи / свойства / и т. Д. Из менее конкретных файлов по мере необходимости. Тем не менее, этот короткий файл - единственное место, где я чувствую себя ограниченным: было бы намного лучше программно сопоставить имена сборок с именами файлов, но MSBuild не позволяет мне делать [декларативный] импорт зависимым от свойств, установленных в целях [времени выполнения], например .
Файлы TFSBuild.Config * .targets по большей части устанавливают только свойства; никакой "настоящей" работы. Они включают свойства Team Build, которые я хочу параметризовать, а также другие, которые управляют работой моих настраиваемых целей (реализованных в другом месте).
TFSBuild.Common.targets - самый длинный файл по порядку величины. Здесь я настраиваю все свойства Team Build с хорошими значениями по умолчанию, переопределяю цели, такие как AfterDropBuild, и определяю множество моих собственных настраиваемых целей, которые выполняются условно в зависимости от того, что установлено в файлах Config *.
Примечание: у меня явно есть вариант рекурсивной загрузки включен, но это не обязательно. Разделение зависимостей сборки на подпапки больше для эстетики, чем для чего-либо еще.
person
Richard Berg
schedule
12.06.2009