c# - 如何在夜间构建期间自动设置程序集版本?

我们有一个夜间构建过程,可以自动对所有 C++ 项目进行版本控制。这是它的工作原理。有一个通用头文件 VersionNumber.h,其中有一个特定的 #define 版本号。几乎构建检查此文件,增加该 #define 后面的整数并将其 checkin 。所有 Visual C++ 项目 #include 将该标题放入其资源文件并使用该定义用于指定版本(版本类似于 1.0.3.ThatNumber)。

到目前为止一切顺利。现在,我希望在同一日常构建中构建的 C# 类库也具有相同的功能。目前他们都有

[assembly: AssemblyVersion("1.0.*")]

在 AssemblyInfo.cs 文件和库中以 1.0.HorribleNumber.AnotherHorribleNumber 作为版本,这两个数字与 C++ 项目使用的数字无关。

如何在我的 C# 项目中轻松实现相同的确定性自动版本编号?

最佳答案

首先你可以指定完整版如下:

[assembly: AssemblyVersion("1.0.9.10")]

其次,一种使这更简单的常用方法(并与您的 C++ 方法相呼应)是在一个包含版本属性的常用位置中放置一个 Version.cs 文件(名称不重要)。然后您可以 add this file as a link 到您所有的 cs 项目,记住从您的 AssemblyInfo.cs 文件中删除版本属性。这样,您只需更新一个文件(在运行构建之前)。您还可以将其他常用程序集属性放入您的 Version.cs 文件中,例如:NeutralResourcesLanguage 或 CLSCompliant。

如果您不使用单一的“Version.cs”方法,那么您可以递归地处理您的源代码目录结构,并单独更新 AssemblyInfo 文件(在运行构建之前)。

它可能与您无关,但版本号(在 AssemblyVersion 中)的最大范围为 16 位。我已经看到这成为这些数字使用日期的问题。如果您希望有更多的自由度,则 AssemblyFileVersion 没有这些限制,但仅用于 .Net 中的信息目的,而不是程序集身份的一部分。通常将 AssemblyVersion 和 AssemblyFileVersion 设置为相同的值,因为某些工具会显示这些值的组合。

有关 AssemblyVersion 与 AssemblyFileVersion 的更多信息,请参阅以下内容:

What are differences between AssemblyVersion, AssemblyFileVersion and AssemblyInformationalVersion?

https://stackoverflow.com/questions/3341697/

相关文章:

git - 如何将修订和构建日期添加到源?

iphone - Xcode 4 代码签名中的 "Any iOS SDK"和 "Debug"有什么区

build - TeamCity 工件;排除单个文件

c# - TeamCity 8 中的 DotCover 不起作用

node.js - 用 postcss 观察多个 css 文件并输出一个 bundle.css

eclipse - 如何查看 Eclipse 中触发 "Build workspace"的原因

tfs - 让 TFS 将变更集放入程序集版本中

android - AOSP的 'lunch'组合是什么意思,需要选择什么?

build - 使用 IntelliJ 进行远程构建

unit-testing - 如何从 Go 测试覆盖中忽略生成的文件