我们使用的是Team Foundation Service而不是本地TFS。 我们的解决方案是在Visual Studio 2012上创建的。 我现在的问题是我们希望所有程序集都具有相同的版本号(这部分已经通过使用链接到所有项目的CommonAssemblyInfo.cs来解决)。 我现在面临的问题是我们需要汇编版本最后一位的tfs变更集编号(例如1.0.0.4711,其中4711是变更集编号)。 我找到了几个例子,但没有一个适合我。 是的,我特别在stackoverflow上搜索了很多。
我还必须承认我从未查看过MSBuild脚本......
任何人都可以给我一个如何实现这一目标的提示吗? 例如,是否可以在Team Foundation Service(而不是本地TFS)上使用MSBuild扩展包以及是否,如何执行此操作?
一如既往,时间是我最大的敌人......
答案 0 :(得分:2)
请注意,从2010年开始,Tfs使用Windows工作流来构建程序包,工作流调用msbuild仅用于编译项目 - 虽然可以通过这种方式将变更集传递给msbuild其更多的跃点。 以下是您的问题,但链接的解决方案需要更复杂: Can assembly version been automatically updated with each TFS 2010 Build?
这是关于自定义构建活动的最好的系列教程之一,我相信作者在堆栈上,特别是关于版本控制的 http://www.ewaldhofman.nl/post/2010/05/13/Customize-Team-Build-2010-e28093-Part-5-Increase-AssemblyVersion.aspx
简而言之,您需要在编译源文件之前运行自定义活动,找到所有CommonAssemblyInfo.cs文件,将此列表提供给您的自定义活动,它会使用完整版本号的传递值或仅更改集和修改内部值。选择检查更改(可能不会因为您的更改集将不同步)。
您还可以查看其中包含TfsVersion活动的https://tfsbuildextensions.codeplex.com/个活动集,至少它会提供示例。
此功能需要通过团队资源管理器和源代码控制提供 - 自定义活动程序集和构建模板通常位于团队项目根目录的文件夹中 - 此文件夹的位置是为构建控制器定义的,您可以通过团队资源管理器构建部分。
更改集可从值BuildDetail.SourceGetVersion获取,不确定2012年是否已修复/更改但是2010年有关于此值的2个问题
应该注意的是,GetVersion应该能够接受任何sourcepec版本 - 变更集,日期,标签等。我没有玩这个足以提供更多细节给你。
答案 1 :(得分:1)
Colin Dembovsky写了great overview of doing version embedding using the new pre-build script setting in TFS 2013 build definitions。
可以在环境变量 TF_BUILD_SOURCEGETVERSION 中的预构建过程中轻松访问变更集编号。我能够使用它在我们的二进制文件中使用基于Dembovsky上面工作的脚本嵌入Changeset值。 (我使用Perl,而不是PowerShell,所以你可能不想看到它; - )
这种方法不需要对构建工作流程进行任何更改,这对我来说是一个巨大的胜利。
答案 2 :(得分:0)
我使用了Wintellect's solution - 仅限MSBuild,不需要TFS魔法。我还添加了自动生成的CSharp文件:
[assembly:AssemblyInformationalVersion("$(BuildNumber)")]
所以我得到了TFS内部版本号。