2011-08-31 156 views
15

现在我们的程序集有一个类似2.0.831.0的版本号。据我了解,这是主要版本,次要版本,日期和内部版本号。如果我做出改变,并在同一天再次构建它的2.0.831.1,2.0.831.2等制作TeamCity版本匹配.NET程序集版本

我TeamCity的版本号格式为根本2. {0} {0}部分是一种自动递增的数字,只是去永远(2.195,2.196等)。

如何使TeamCity的外观酷似程序集的版本?我们希望能够将更改日志与程序集版本相关联,因此任何人都可以说程序集版本2.0.831.2在这些文件中有这些更改。

附加信息: 如果有问题,我们的构建步骤使用“Visual Studio(sln)”选项而不是“MSBuild”。 如果有问题,我们使用Subversion进行源代码管理。 我们的TeamCity版本是6.5.1(build 17834)。

+0

http://stackoverflow.com/questions/1041153/teamcity-labeling-vcs-subversion-with-an-artifacts-file-version – sylvanaar

回答

21

我建议你采用semantic versioning scheme{major}.{minor}.{patch}并为内部编号{major}.{minor}.{patch}.{build}附加第4个元素。 这样做将版本日期纳入版本控制方案更为有用。

的TeamCity 6.5(你有没有指定的版本)有一个内置功能,可用于在生成过程中修补在AssemblyInfo.cs中的版本。请参阅AssemblyInfo Patcher的文档。

AssemblyInfo patcher dialog (TeamCity documentation)

然后,您可以定义你想在你的组装和使用的构建本身的格式,也可用于修补功能的方式构建数字格式。

+0

评论ccellar为答案,因为我没有足够的评论声望。版本字符串格式为: major.minor [.build [.revision]] 版本号是第3个元素,而不是第4个。如果AssemblyVersion没有这种格式,那么Version类将在Build和Revision属性中具有不正确的值。 http://msdn.microsoft.com/en-us/library/system.version。aspx – jbtibor

+2

@jbtibor好的一点是,微软有不同的版本号方案,但我认为ccellar的方案更有意义,它是我使用的方案。想一想:使用TeamCity内部版本号时,版本号始终是唯一的,因此多个版本可以有相同版本,但不可能在同一版本上有多个版本,MS的方案似乎暗示了这种版本。 –

+0

您可以在AssemblyInfo.cs中使用属性AssemblyInformationalVersionAttribute来指定semver版本(该属性将允许您指定任何字符串作为版本)。这个值可以被构建过程拾取和使用。在进行更改以确定他/她检查的事物的版本信息之前,我喜欢这种想法取决于开发人员。 –

6

一个解决方案是使用MSBuild运行器,并编写一个MSBuild脚本,它从AssemblyInfo文件读取版本信息,在运行构建时将TeamCity构建版本设置为该值,然后递增该版本的构建编号部分,并将该值写回到AssemblyInfo。

这不是特别微不足道的,因为您需要了解编写自定义MSBuild脚本的知识,并且您可能需要使用某些社区任务等来读取/写入版本信息。

我们还使用全局程序集信息文件的概念,我们所有的组件引用(使用添加链接在VS),因此,我们只需要在构建过程中更新一个文件。

有一个很好的文章here,它描述了这样共同的CI任务,MSBuild的。他正在使用CruiseControl.NET,但其中大部分仍然适用。如果你运行的是TeamCity 6.5,我会考虑使用它的构建特性,因为这将比定制的MSBuild脚本更容易维护。

+1

这都有道理。有没有任何教程来完成这个?我以前从未使用过MSBuild。你有什么具体的例子吗? – Dzejms

+0

解答已更新。 – devdigital