我们希望将重写的构建目标存储在外部文件中,并在TFSBuild.proj中包含该目标文件.我们有一个核心设置步骤,只需将导入行添加到向导创建的TFSBuild.proj即可获得这些额外步骤.
我们无法对任何文件进行导入,$(SolutionRoot)
因为在验证Import语句时,尚未从存储库中获取源.看起来TFS正在拉下第TFSBuild.proj
一个而没有任何其他文件.
即使我们添加条件导入,如果存在,也不会导入源代码管理中的版本.将导入已存在于磁盘上的先前版本.
我们可以放弃使用源代码存储这些构建目标,但它是第一个移出源代码树的依赖项,因此我们不愿意这样做.
有没有办法:
告诉Team Build是否还有一些文件,以便Import
正确评估这些语句?
覆盖那些Team Build目标,比如AfterCompile
除了Import
?
最终在Team Build中运行构建目标,这些构建目标保留在它正在尝试构建的源代码下吗?
Martin Woodw.. 16
Team Build有一个"bootstrap"阶段,其中Team Build Configuration文件夹(带有TFSBuild.proj的文件夹)中的所有内容都是从版本控制下载的.这是在构建代理调用MSBuild.exe之前由构建代理执行的,告诉它运行TFSBuild.proj.
如果从SolutionRoot下移动目标文件并将其放在TFSBuild.proj文件旁边的配置文件夹中,则可以使用相对导入语句将其导入TFSBuild.proj文件,即
如果这些目标依赖于任何其他自定义MSBuild任务程序集,那么您也可以将它们放在与TFSBuild.proj文件相同的文件夹中,并且可以使用相对路径轻松地引用它们.
请注意,在TFS2008中,构建配置文件夹默认为$/TeamProject/TeamBuildTypes,但是它不必存在.它实际上可以存在于解决方案内的文件夹中 - 甚至可以是专用于Team Build的解决方案中的项目.这有几个优点,包括使构建的分支更容易.因此,我的构建通常位于如下文件夹中:
$/TeamProject/main/MySolution/TeamBuild
另请注意,默认情况下,在构建的引导阶段,构建代理仅下载构建配置文件夹中的文件,并且不会向下递归到任何子文件夹.如果您希望在引导阶段将文件包含在子文件夹中,则可以在构建代理程序计算机上的tfsbuildserver.exe.config文件的appSettings中设置以下属性(位于%ProgramFiles%\ Visual Studio 9.0\Common7\IDE中)\PrivateAssemblies)
请注意,如果您有多个构建代理,则必须记住在所有计算机上设置此设置,这会影响该构建代理执行的每个构建 - 所以最好只保留文件的根目录.如果可以,构建配置文件夹.
祝好运,
马丁.
Team Build有一个"bootstrap"阶段,其中Team Build Configuration文件夹(带有TFSBuild.proj的文件夹)中的所有内容都是从版本控制下载的.这是在构建代理调用MSBuild.exe之前由构建代理执行的,告诉它运行TFSBuild.proj.
如果从SolutionRoot下移动目标文件并将其放在TFSBuild.proj文件旁边的配置文件夹中,则可以使用相对导入语句将其导入TFSBuild.proj文件,即
如果这些目标依赖于任何其他自定义MSBuild任务程序集,那么您也可以将它们放在与TFSBuild.proj文件相同的文件夹中,并且可以使用相对路径轻松地引用它们.
请注意,在TFS2008中,构建配置文件夹默认为$/TeamProject/TeamBuildTypes,但是它不必存在.它实际上可以存在于解决方案内的文件夹中 - 甚至可以是专用于Team Build的解决方案中的项目.这有几个优点,包括使构建的分支更容易.因此,我的构建通常位于如下文件夹中:
$/TeamProject/main/MySolution/TeamBuild
另请注意,默认情况下,在构建的引导阶段,构建代理仅下载构建配置文件夹中的文件,并且不会向下递归到任何子文件夹.如果您希望在引导阶段将文件包含在子文件夹中,则可以在构建代理程序计算机上的tfsbuildserver.exe.config文件的appSettings中设置以下属性(位于%ProgramFiles%\ Visual Studio 9.0\Common7\IDE中)\PrivateAssemblies)
请注意,如果您有多个构建代理,则必须记住在所有计算机上设置此设置,这会影响该构建代理执行的每个构建 - 所以最好只保留文件的根目录.如果可以,构建配置文件夹.
祝好运,
马丁.