Я только что опубликовал здесь другой метод:
http://mikehadlow.blogspot.com/2009/06/tfs-build-publishedwebsites-for-exe-and.html
но если вы не можете перейти по ссылке, вот она в полном объеме:
Как правило, рекомендуется собирать весь код под управлением вашей команды в одно решение Uber, как описано в этом документе «Шаблоны и практики», PDF, Руководство по разработке команд с TFS. Если вы затем сконфигурируете сервер сборки TFS для сборки этого решения, то по умолчанию будет размещаться вывод сборки в одну папку, «Release».
Любые проекты веб-приложений в вашем решении также будут выводиться в папку с именем _PublishedWebsites \. Это очень хорошо, потому что это означает, что вы можете просто Robocopy развернуть веб-приложение.
К сожалению, нет аналогичного поведения по умолчанию для других типов проектов, таких как WinForms, консоль или библиотека. Было бы очень хорошо, если бы у нас была папка _PublishedApplications \ с выводом любого выбранного проекта (-ов). К счастью, это не так сложно сделать.
Принцип работы _PublishedWebsites довольно прост. Если вы посмотрите на файл проекта вашего веб-приложения, вы увидите импорт внизу:
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" />
На моем компьютере свойство MSBuildExtensionsPath оценивается как C: \ Program Files \ MSBuild. Если мы откроем файл Microsoft.WebApplication.targets, то увидим, что это довольно простой файл MSBuild, который распознает, когда сборка не является сборкой рабочего стола, то есть это сборка TFS, которая копирует вывод в:
$(OutDir)_PublishedWebsites\$(MSBuildProjectName)
Я просто скопировал файл Micrsoft.WebApplication.targets, поместил его в систему контроля версий с относительным путем к файлам моего проекта, изменил _PublishedWebsites на _PublishedApplications и переименовал файл CI.exe.targets. Для каждого проекта, который я хочу вывести в _PublishedApplications, я просто добавил этот импорт внизу файла проекта:
<Import Project="<your relative path>\CI.exe.targets" />
Вы можете отредактировать CI.exe.targets (или как вы хотите это называть), чтобы сделать ставку. В моем случае единственное изменение на данный момент - это добавить пару строк для копирования файла App.config:
<Copy SourceFiles="$(OutDir)$(TargetFileName).config" DestinationFolder="$(WebProjectOutputDir)\bin" SkipUnchangedFiles="true" />
В Microsoft.WebApplication.targets есть много вещей, которые имеют отношение только к веб-приложениям и могут быть удалены для других типов проектов, но я оставлю это как упражнение для читателя.