我正在尝试设置一个 common.targets 文件,其中包含一些我想在团队构建中使用的常见 msbuild 目标,因此导入到我的 TFSBuild.proj 文件中。我想知道实现这一目标的最佳方法是什么?我是否需要将 common.targets 存储在每个 TFSBuild.proj 文件旁边,因此每个团队构建都有目标文件的副本,还是有其他方法?我宁愿不将目标文件放在每台构建机器上。
4 回答
将它放在源代码管理中您喜欢的公共位置。在使用目标之前,请像这样从 TFSBuild.proj 文件中获取:
<PropertyGroup>
<!--Path to the TFS Command Line (used for checkin and out)-->
<TxTf>"C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\tf"</TxTf>
<WorkingDirectory>C:\YourPathHere<WorkingDirectory>
<CustomProjTFSDir>"$/YourProj/YourCustomProjPath"</CustomProjTFSDir>
</PropertyGroup>
<Exec WorkingDirectory="$(WorkingDirectory)"
Command="$(TxTf) get $(CustomProjTFSDir)"/>
这项工作的关键是为您的构建代理用户设置一个指向您的自定义内容的工作区。此目录不应与您的正常构建位于同一空间。
瓦卡诺
在调用 TFSBuild.proj 之前,Team Build 有一个引导阶段,在该阶段仅从源代码管理下载同一目录中的 TFSBuild.proj 和其他文件。因此,如果您希望您的目标文件受源代码控制,则需要将其放在与 TFSBuild.proj 相同的位置
我从未尝试过,但您可以将目标文件放在网络共享上,然后使用 unc 共享导入它。就像是
<Import Project="\\anothermachine\share\something.targets"/>
但这需要构建帐户和所有运行桌面构建的人都可以访问该网络共享。
通用 .targets 文件的目标是减少脚本的重复。如果您在源代码管理下有此文件的多个副本,当您需要更改它们时会发生什么(可能更新 .exe 路径)?就个人而言,我更喜欢任何/所有其他构建脚本可以引用的公共文件的单独位置。唯一的缺点是您可能会硬编码此文件的路径。
您可以将它们与 MS 目标一起存储在 $Volume\Program Files\MSBuild 中。这样做的好处是您可以使用内置的已知元数据“$(MSBuildExtensionsPath)\Path\To\Your\Targets”创建相对路径