我们有一个夜间构建过程,可以自动对所有 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/