使TeamCity版本匹配.NET程序集版本

时间:2011-08-31 14:44:36

标签: versioning teamcity .net-assembly

现在我们的程序集的版本号为2.0.831.0。据我了解,这是主要版本,次要版本,日期和内部版本号。如果我在同一天进行更改并再次构建,则为2.0.831.1,2.0.831.2等。

我的TeamCity内部版本号格式只是2. {0}其中{0}是一个自动递增的数字,它将永远存在(2.195,2.196等)。

如何让TeamCity看起来与装配版本完全一样?我们希望能够将更改日志与程序集版本相关联,这样任何人都可以说程序集版本2.0.831.2在这些文件中有这些更改。

额外信息: 如果重要的话,我们的构建步骤使用“Visual Studio(sln)”选项而不是“MSBuild”。 如果重要,我们使用Subversion进行源代码控制。 我们的TeamCity版本是6.5.1(build 17834)。

2 个答案:

答案 0 :(得分:21)

我建议您采用semantic versioning scheme {major}.{minor}.{patch}并为构建号{major}.{minor}.{patch}.{build}添加第4个元素。 这对于将构建日期包含在版本控制方案中更为有用。

TeamCity 6.5(您尚未指定版本)具有构建功能,可用于在构建期间修补AssemblyInfo.cs中的版本。请参阅AssemblyInfo Patcher的文档。

AssemblyInfo patcher dialog (TeamCity documentation)

然后,您可以按照组件中的方式定义构建号格式,并使用构建本身的格式,以及修补功能。

答案 1 :(得分:6)

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

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

我们还使用全局AssemblyInfo文件的概念,我们所有程序集都引用该文件(使用VS中的Add Link),因此我们只需要在构建期间更新一个文件。

有一篇优秀的文章here,它描述了使用MSBuild执行常见的CI任务。他正在使用CruiseControl.NET,但其中大部分仍然适用。如果你正在运行TeamCity 6.5,我会考虑专门使用它的构建功能,因为这比自定义的MSBuild脚本更容易维护。