Не все файлы типа сборки TFS копируются - PullRequest
0 голосов
/ 15 апреля 2010

Поскольку у меня есть несколько сборок, совместно использующих некоторые сборки, содержащие общие задачи сборки, у меня есть один файл TFSBuild.proj для всех сборок и импорт различных целей в зависимости от сборки, например:

<Project DefaultTargets="DesktopBuild" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">

  <Import Project="Build_1.targets" Condition="'$(BuildDefinition)'=='Build_1'" />
  <Import Project="Build_2.targets" Condition="'$(BuildDefinition)'=='Build_2'" />
  <Import Project="Build_3.targets" Condition="'$(BuildDefinition)'=='Build_3'" />
</Project>

Каждая цель дляв конкретной сборке есть ваш обычный контент для файла типа сборки, но в моем случае я также ссылаюсь на некоторые задачи внутри сборок, отмеченных в той же папке, что и TFSBuild.proj в системе управления версиями.Я хотел добавить папки, содержащие некоторые цели тестовой сборки, так как моя папка была немного заполнена и загромождена.Ниже показано, что я имею в виду.

$(TFS project)\build\
               TFSBuild.proj
               Build_1.targets
               ...
               Assembly1.dll
               Assembly2.dll
               ...

               Folder\
                      Test_target_1.targets
                      ....

Однако, когда я указывал свою сборку, я обнаружил, что Test_target_1.targets и другие файлы в папке не копируются в каталог сборки, тогда как TFSBuild.proj и другиекак бы копировались файлы в корневом уровне папки типа сборки.Это привело к тому, что моя тестовая сборка не смогла ссылаться на файлы внутри папки, что привело к немедленной ошибке моей сборки.Другими словами,

$(TFS project)\build\
               TFSBuild.proj
               Build_1.targets
               ...
               Assembly1.dll
               Assembly2.dll
               ...

               Folder\
                      (nothing here)

Я понимаю, что самым простым обходным путем было бы избавиться от папки и переместить все ее содержимое в папку сборки, но мне бы очень хотелось, чтобы вообще была папкавозможный.Заранее спасибо за помощь.

1 Ответ

5 голосов
/ 04 мая 2010

В Team Build 2008 на машине для сборки есть параметр, который необходимо изменить, чтобы он загружал подкаталоги в папке сборки - добавьте его в файл TFSBuildService.exe.config:

<!-- ConfigurationFolderRecursionType
     Set this value to Full to get the subdirectories of the BuildType folder.  We
     put the Agilent Custom targets and tasks in subdirectories.
     -->
<add key="ConfigurationFolderRecursionType" value="Full" />

Чтобы добавить его, необходимо остановить службу сборки, отредактировать c: \ Program Files \ Microsoft Visual Studio 9.0 \ Common7 \ IDE \ PrivateAssemblies \ TFSBuildService.exe.config, а затем перезапустить службу.

Единственное предостережение - вы должны помнить, чтобы делать это на любых будущих машинах сборки. Но совершенно очевидно, в чем проблема, если вы забудете.

Кстати, этот параметр доступен в опциях сборки в 2010 году, что немного удобнее.

...