【问题标题】:Where should I store common targets for team builds?我应该在哪里存储团队构建的通用目标?
【发布时间】:2009-03-02 13:05:31
【问题描述】:

我正在尝试设置一个 common.targets 文件,其中包含一些我想在团队构建中使用的常见 msbuild 目标,因此导入到我的 TFSBuild.proj 文件中。我想知道实现这一目标的最佳方法是什么?我是否需要将 common.targets 存储在每个 TFSBuild.proj 文件旁边,因此每个团队构建都有目标文件的副本,还是有其他方法?我宁愿不将目标文件放在每台构建机器上。

【问题讨论】:

  • 这里有一些很好的答案。你为什么不评论为什么他们不工作或接受一个.....
  • 你是对的。这样做了。感谢您的回答。

标签: tfs msbuild tfsbuild targets


【解决方案1】:

将它放在源代码管理中您喜欢的公共位置。在使用目标之前,请像这样从 TFSBuild.proj 文件中获取:

<PropertyGroup>
  <!--Path to the TFS Command Line (used for checkin and out)-->
  <TxTf>&quot;C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\tf&quot;</TxTf>

  <WorkingDirectory>C:\YourPathHere<WorkingDirectory>
  <CustomProjTFSDir>&quot;$/YourProj/YourCustomProjPath&quot;</CustomProjTFSDir>
</PropertyGroup>

<Exec WorkingDirectory="$(WorkingDirectory)"
      Command="$(TxTf) get $(CustomProjTFSDir)"/>

这项工作的关键是为您的构建代理用户设置一个指向您的自定义内容的工作区。此目录不应与您的正常构建位于同一空间。

瓦卡诺

【讨论】:

  • 你把 Exec 调用放在哪里了?如果我将它放在目标中,则首先尝试导入并失败。如果我尝试将它直接放在根 下,我会收到错误消息。如何在尝试导入文件之前对文件执行 Get?
  • @Elezar - 5 年前我可以回答你的问题。很长一段时间以来,我都没有对 MS Build 做太多事情。我现在不记得了。对不起。
  • 好的,考虑到这个答案有多老,我认为这是一个很长的尝试。不过,感谢您的回复!
【解决方案2】:

在调用 TFSBuild.proj 之前,Team Build 有一个引导阶段,在该阶段中,只有 TFSBuild.proj 和同一目录中的其他文件会从源代码管理中下载。 因此,如果您希望您的目标文件受源代码控制,则需要将其放在与 TFSBuild.proj 相同的位置

More details in this answer

我从未尝试过,但您可以将目标文件放在网络共享上,然后使用 unc 共享导入它。类似的东西

<Import Project="\\anothermachine\share\something.targets"/>

但这需要构建帐户和所有运行桌面构建的人都可以访问该网络共享。

【讨论】:

    【解决方案3】:

    通用 .targets 文件的目标是减少脚本的重复。如果您在源代码控制下有此文件的多个副本,当您需要更改它们时会发生什么(可能更新 .exe 路径)?就个人而言,我更喜欢任何/所有其他构建脚本可以引用的公共文件的单独位置。唯一的缺点是您可能会对该文件的路径进行硬编码。

    【讨论】:

      【解决方案4】:

      您可以将它们与 MS 目标一起存储在 $Volume\Program Files\MSBuild 中。这样做的好处是您可以使用内置的已知元数据“$(MSBuildExtensionsPath)\Path\To\Your\Targets”创建相对路径

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 2019-04-25
      • 2013-12-15
      • 1970-01-01
      相关资源
      最近更新 更多