使用托管TFS将集合编号更改为版本信息 我们使用Team Foundation服务代替本地TFS。 我们的解决方案是在Visual Studio 2012上创建的。 我的问题是,现在我们希望所有程序集都具有相同的版本号(此部分已通过使用链接到所有项目的CommonAssemblyInfo.cs解决)。 我现在面临的问题是,在程序集版本的最后一位需要tfs变更集编号(例如,1.0.0.4711,其中4711是变更集编号)。 我找到了几个例子,但没有一个对我有用。 是的,我特别在stackoverflow上搜索了很多

使用托管TFS将集合编号更改为版本信息 我们使用Team Foundation服务代替本地TFS。 我们的解决方案是在Visual Studio 2012上创建的。 我的问题是,现在我们希望所有程序集都具有相同的版本号(此部分已通过使用链接到所有项目的CommonAssemblyInfo.cs解决)。 我现在面临的问题是,在程序集版本的最后一位需要tfs变更集编号(例如,1.0.0.4711,其中4711是变更集编号)。 我找到了几个例子,但没有一个对我有用。 是的,我特别在stackoverflow上搜索了很多,tfs,msbuild,visual-studio-2012,tfsbuild,azure-devops,Tfs,Msbuild,Visual Studio 2012,Tfsbuild,Azure Devops,我还必须承认,我从未研究过MSBuild脚本 有谁能给我一个关于如何做到这一点的提示吗? 例如,可以使用Team Foundation Service(不是本地TFS)上的MSBug扩展包吗?如果可以,怎么做? 一如既往,时间是我最大的敌人…请注意,从2010年开始,Tfs使用Windows workflow来构建包,工作流仅为编译项目调用msbuild,而通过这种方式将变更集传递给msbuild可能会使其跳跃更多。 以下内容解决了您的问题,但链接的解决方案比所需的更为复杂: 这是关于自定义构

我还必须承认,我从未研究过MSBuild脚本

有谁能给我一个关于如何做到这一点的提示吗? 例如,可以使用Team Foundation Service(不是本地TFS)上的MSBug扩展包吗?如果可以,怎么做?


一如既往,时间是我最大的敌人…

请注意,从2010年开始,Tfs使用Windows workflow来构建包,工作流仅为编译项目调用msbuild,而通过这种方式将变更集传递给msbuild可能会使其跳跃更多。 以下内容解决了您的问题,但链接的解决方案比所需的更为复杂:

这是关于自定义构建活动的最佳系列教程之一,我相信作者也很在行,其中一个是关于版本控制的

简而言之,在编译源文件之前,您需要运行一个自定义活动,查找所有CommonAssemblyInfo.cs文件,将此列表提供给您的自定义活动,它使用传递的完整版本号值或仅更改集修改其中的值,并可选地签入更改(可能不会,因为您的更改集届时将不同步)

您还可以查看一组活动,其中有TfsVersion活动,至少它会提供示例

此功能需要通过团队资源管理器和源代码管理提供-自定义活动程序集和生成模板通常位于团队项目根目录中的文件夹中-此文件夹的位置是为生成控制器定义的-您可以通过团队资源管理器生成部分更改此位置

变更集可从value BuildDetail.SourceGetVersion获得,不确定这是否在2012年修复/更改,但2010年该值有两个问题

  • 它不尊重默认构建模板中的GetVersion覆盖-如果使用覆盖,您将需要手动更新
  • 运行最新版本(无覆盖)时,它将从tfs获取最后一个变更集编号-根据您的分支,这可能与版本分支的“最后一个”变更集不同。您将不得不接受这一点,为每个生成提供覆盖,或者实现检查分支历史上最后一个变更集值并再次覆盖它的活动
  • 应该注意的是,GetVersion应该能够接受任何sourcespec版本-变更集、日期、标签等。我还没有充分地考虑过这一点,以便向您提供更多详细信息

    我只使用了-MSBuild,不需要TFS魔法。我还向自动生成的CSharp文件中添加了:
    [汇编:AssemblyInformationalVersion(“$(BuildNumber)”)]

    所以我得到了TFS的版本号。

    Colin Dembovsky写了一篇文章

    在环境变量TF\u build\u SOURCEGETVERSION中的预构建过程中,可以轻松访问变更集编号。我能够使用基于Dembovsky上述工作的脚本将变更集值嵌入到二进制文件中。(我使用的是Perl,不是powershell,所以您可能不想看到它;-)


    这种方法不需要对构建工作流进行任何更改,这对我来说是一个巨大的成功。

    非常感谢,您的帖子中有一些非常有用的链接!然而,我仍然没有找到一个有效的方法来获取变更集编号。。。我发现有几篇文章使用了一个在VS2012中似乎不起作用的标签。。。这是对使用尖端技术的惩罚。根据变更集编号进行编辑。注意,BuildNumber不是变更集-它可能根本不包含变更集-它在默认实现中不包含变更集。那么,使用变更集编号的脚本版本是什么样的呢?