并非所有TFS Build类型文件都被复制

时间:2010-04-14 22:48:29

标签: tfs msbuild tfsbuild

因为我有几个构建共享一些包含公共构建任务的程序集,所以我有一个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和Folder中的其他文件没有被复制到构建目录,而TFSBuild.proj和根级别的其他文件,就像构建目录一样正在复制类型文件夹。这导致我的测试版本无法引用Folder中的文件,导致我的构建立即失败。换句话说,

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

               Folder\
                      (nothing here)

我意识到最简单的解决方法是摆脱文件夹并将其所有内容移动到构建文件夹,但我真的想拥有文件夹,如果可能的话。感谢您的帮助。

1 个答案:

答案 0 :(得分:5)

使用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年的构建选项中公开,这样更方便。