我正在尝试设置一个common.targets文件,其中包含我想在团队构建中使用的一些常见的msbuild目标,因此导入到我的TFSBuild.proj文件中。我想知道实现这个目标的最佳方法是什么?我是否需要在每个TFSBuild.proj文件旁边存储common.targets,因此每个团队构建都有目标文件的副本,还是有其他方法?我宁愿不把目标文件放在每台构建机器上。
答案 0 :(得分: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)"/>
这项工作的关键是为构建代理用户设置一个指向自定义内容的工作区。此目录不应与正常构建位于同一空间。
Vaccano
答案 1 :(得分:3)
Team Build在调用TFSBuild.proj之前有一个bootstrapper阶段,其中只有TFSBuild.proj和同一目录中的其他文件从源代码管理中下载。 因此,如果您希望目标文件受源代码控制,则需要将其放在与TFSBuild.proj相同的位置
我从未尝试过,但您可以将目标文件放在网络共享上,然后使用unc共享导入它。像
这样的东西<Import Project="\\anothermachine\share\something.targets"/>
但这需要构建帐户和运行桌面构建的所有人都可以访问该网络共享。
答案 2 :(得分:2)
常见的.targets文件的目标是减少脚本的重复。如果您在源代码管理下拥有此文件的多个副本,那么当您需要更改它们时会发生什么(可能更新.exe路径)?就个人而言,我更喜欢任何/所有其他构建脚本可以引用的公共文件的单独位置。唯一的缺点是你可能会对这个文件的路径进行硬编码。
答案 3 :(得分:2)
您可以将它们与$ Volume \ Program Files \ MSBuild中的MS目标一起存储。这样做的好处是,您可以使用内置的已知元数据“$(MSBuildExtensionsPath)\ Path \ To \ Your \ Targets”
创建相对路径