TFS和MSBuild版本号与最后更改集

15

我希望创建一个构建号,看起来像“主版本号.次版本号.日期.TFS中的最后更改集编号”,问题是如何从TFS获取最后的更改集编号。是否有任何属性或其他方法可以实现?


这个问题已经有答案了,请看:https://dev59.com/wXRB5IYBdhLWcg3wtJGF - Burt
@Burt,链接的问题/答案是关于自动生成的TFS BuildNumber,这与变更集编号完全不同。 - makhdumi
4个回答

11

好的,最终我找到了解决方案。下面是一个任务,可以提供最新的变更集号,并创建一个属性将其插入一个程序集信息版本号中。主要问题在于缺少TfsLibraryLocation属性(如果没有它,应该会指向GAC中的库,但实际上没有)。

<Target Name="GetVersionChangeSet">
<TfsVersion
  TfsLibraryLocation="C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies"      
  LocalPath="$(SolutionRoot)">
  <Output TaskParameter="Changeset" PropertyName="ChangesetNumber"/>
</TfsVersion>
<Message Text="TFS ChangeSetNumber: $(ChangesetNumber)" />


3
对于VS2010,TfsLibraryLocation已更改为"$(DevEnvDir)ReferenceAssemblies\v2.0"。另外,$(SolutionRoot)并不存在,但$(SolutionDir)存在。 - Scott Stafford
1
TfsVersion任务似乎不再适用于使用TFS 2010。我已经在这里为TFS 2010发布了一个答案:https://dev59.com/-GbWa4cB1Zd3GeqPaMEo#12923581 - Derek Evermore

2
根据这个页面上的评论,您可以使用命令行tf changeset /latest /i,但我在家无法验证。

tf changeset /latest /i 可以获取正确的信息,但如何将其放入属性中呢? - Mark Cooper

1

抱歉,我无法对最新的答案进行评论。

您提供的 TfsVersion 任务仅会在 $(SolutionRoot) 中提供最新的变更集编号。

如果您在 $(SolutionRoot)\subdir 中有更新的内容,则提供的解决方案将无法正常工作,因为它将从 $(SolutionRoot) 而不是从 $(SolutionRoot)\subdir 中获取最新的内容。

我使用 tf changeset /latest /i,这对我很有效。


请注意...这将获取TFS中的最新变更集,而不管您当前在本地文件夹中拥有哪个变更集。 - Brian Low

0

请查看以下扩展项目。您将找到大约5种不同的解决问题的方法。

  • MSBuild Extension Pack - 这个扩展提供了超过280个任务,目前正在积极维护
  • MSBuild Community Tasks Project - 自2007年以来未得到维护,这组约90个任务仍然具有一些独特的任务,即基于平面文件的版本任务
  • SDC Tasks Library - 自2008年8月以来未得到维护,这个扩展已被吸收到MSBuild Extension Pack中。如果在MSBuild Extension Pack中找不到某些内容,请查看此扩展,它拥有300多个任务,很可能会有您需要的内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接