首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TFSBuild.proj和导入外部目标

TFSBuild.proj和导入外部目标
EN

Stack Overflow用户
提问于 2008-09-18 21:48:17
回答 3查看 4.5K关注 0票数 7

我们希望将重写的构建目标存储在外部文件中,并将该目标文件包括在TFSBuild.proj中。我们有一个核心设置步骤,并且希望通过简单地将导入行添加到向导创建的TFSBuild.proj来获得这些附加步骤。

代码语言:javascript
复制
<Import Project="$(SolutionRoot)/libs/my.team.build/my.team.build.targets"/>

我们不能对$(SolutionRoot)中的任何文件进行导入,因为在验证Import语句时,还没有从存储库中获取源。看起来,TFS首先要在没有任何其他文件的情况下解压TFSBuild.proj

即使我们添加了有条件导入,如果存在的话,源代码管理中的版本也不会被导入。将导入磁盘上已经存在的先前版本。

我们可以放弃用源代码存储那些构建目标,但是它是第一个从源树中移出的依赖项,所以我们不愿意这样做。

有没有办法:

correctly?

  • Override

  • 告诉Team删除几个文件,以便这些Import语句评估,这些团队构建目标像AfterCompile一样,除了团队构建中的Import
  1. Ultimately运行构建目标之外,这些目标都保存在它试图构建的源代码之下?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-09-19 08:29:34

Team有一个“引导”阶段,其中文件夹(带有TFSBuild.proj的文件夹)中的所有内容都是从版本控制中下载的。这是在构建代理调用MSBuild.exe告诉它运行TFSBuild.proj之前由构建代理执行的。

如果从SolutionRoot下移动目标文件并将其放在配置文件夹中与TFSBuild.proj文件一起使用,则可以使用相对导入语句将其导入到TFSBuild.proj文件中,即

代码语言:javascript
复制
<Import Project="myTeamBuild.targets"/>

如果这些目标依赖于任何其他自定义MSBuild任务程序集,那么您也可以将它们放在与TFSBuild.proj文件相同的文件夹中,并且可以使用相对路径轻松地引用它们。

注意,在TFS2008中,build configuration文件夹默认位于$/TeamProject/TeamBuildTypes下面,但是它不一定存在。它实际上可以存在于解决方案中的文件夹中--甚至可以是解决方案中专门用于团队构建的项目。这有几个优点,包括使构建分支更容易。因此,我通常将构建放在这样的文件夹中:

代码语言:javascript
复制
$/TeamProject/main/MySolution/TeamBuild

还请注意,默认情况下,在构建的引导阶段,生成代理将只下载生成配置文件夹中的文件,而不会将文件递归到任何子文件夹中。如果希望在引导阶段将文件包含在子文件夹中,则可以在生成代理计算机上的appSettings文件中设置以下属性(位于%ProgramFiles%\VisualStudio9.0\Common7\IDE\PrivateAssemblies中)

代码语言:javascript
复制
<add key="ConfigurationFolderRecursionType" value="Full" />

注意,如果您有多个构建代理,您必须记住在所有机器上设置此设置,并且它将影响该构建代理所执行的每个构建-因此,如果可能的话,最好将文件保存在build configuration文件夹的根目录中。

祝好运,

马丁。

票数 16
EN

Stack Overflow用户

发布于 2008-09-18 22:05:32

如果目标仅在TFS运行构建时才能运行,而不是在本地开发机器上运行,则可以将目标文件放在构建本身的文件夹中,并使用以下方法引用:

代码语言:javascript
复制
<Import Project="$(MSBuildProjectDirectory)\my.team.build.targets.proj" />

但是,如果希望为所有构建运行目标,则可以将其设置为单个项目引用它,方法是添加以下内容:

代码语言:javascript
复制
<Import Project="$(SolutionRoot)/libs/my.team.build/my.team.build.targets" Condition="Exists('$(SolutionRoot)/libs/my.team.build/my.team.build.targets')" />

在我的项目中,我们实际上使用了这两种方法,第一种允许我们定制夜间构建,这样我们就可以在运行完整的解决方案编译之前和之后执行额外的步骤,第二种允许逐个项目定制。

票数 1
EN

Stack Overflow用户

发布于 2008-09-19 05:32:35

如果您创建一个重写目标文件来导入和调用类似于TeamBuildOverrides.targets的内容,并将其放在TFSBuild.proj所在的源代码管理中的同一个文件夹中,用于构建类型,那么它将首先被提取并可用于导入到TFSBuild.proj文件中。默认情况下,TFSBuild.proj文件将直接添加到源代码管理中的TeamBuildTypes文件夹中,直接位于项目的根文件夹下。

在TFSBuild.proj文件中使用以下导入语句:

代码语言:javascript
复制
<Import Project="$(MSBuildProjectDirectory)\TeamBuildOverrides.targets" />

确保您的TFSBuild.proj文件中没有任何重复重写,否则导入的重写不会被触发。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/97349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档