【问题标题】:Increment the build number automatically自动增加内部版本号
【发布时间】:2013-01-11 10:48:00
【问题描述】:
我有两个正在解决的项目。一个是版本 3.0.0.*,另一个是 2.0.0.*。我使用 MSBuild 脚本在 Team City 上构建我的解决方案。如何将版本字符串的内部版本号部分注入到 AssemblyVersion 属性中,而将major.minor.patch 保留为在开发时定义的。
换一种说法,我想手动控制major.minor.patch(解决方案中的不同库的major会有所不同),但会自动增加内部版本号。
【问题讨论】:
标签:
.net
msbuild
teamcity
versioning
【解决方案1】:
TeamCity 会自动为您管理 AssemblyVersion 属性,但有一些注意事项:
- 它将完全覆盖现有值。
- 它将更新解决方案中的所有AssemblyVersions,因此如果您必须在同一解决方案中保留不同的项目版本,这可能不适合您。
有了这些注意事项,以下是我们的设置方式:
- 在构建配置的常规设置中,将
Build number format 更改为%version%.{0}
- 在您的构建参数中,将
%version% 定义为您的major.minor.patch。
- 在您的构建步骤中,滚动到屏幕底部并单击添加构建功能。选择
AssemblyInfo patcher。确保Assembly version format 填写为%build.number%。
就是这样。 TeamCity 会将您的所有程序集信息更新为由 %version% 和构建计数器定义的 major.minor.patch.build,然后在构建的最后一步自动恢复这些更改。
【解决方案2】:
您可以在 msbuild 中通过 $(BUILD_NUMBER) 获得 Teamcity 配置内部版本号。将您的 teambuild no 保留为默认的 {0}。
我建议您使用它并通过您自己的自定义 msbuild 编辑两个程序集信息文件。您可以保留每个文件的标记化版本,以便版本文件在版本属性中包含 2.0.0.$(BUILD_NUMBER),然后使用扩展包 detokenise 来转换两者(或任何数量的文件)。
仍然认为您应该在两个项目上使用相同的版本控制...