天天看点

[BuildRelease]产品和文件版本号

一产品和文件版本号

1)产品和文件版本号

产品和文件版本号用来标识产品或者产品中文件的版本。通常的在Windows上对于PE(DLL和EXE)文件我们可以在文件的右键的属性的版本下面看到文件的版本号和所在产品的版本信息。例如visual studio2008中vcbuild.exe的版本信息如下:

还有我们通常可以在软件的帮助下的关于对话框中看到产品的版本信息,例如Visual Stduio2008的如下:

2)文件或产品版本号规则

通常的文件或产品的版本号由 4个整数组成,形式如:AAAA.BBBB.CCCC.DDDD,例如VisualStuido2008的版本号9.0.30729.1。

AAAA.BBBB.CCCC.DDDD的形式中的AAAA.BBBB,会随着产品的不同的release而改变,例如Visual studio中VC6到VS2008的变化,AAAA.BBBB的变化应该为VC6为6.0,VS2002为7.0,VS2003为7.1,VS2005 为8.0,而VS2008为9.0。至于CCCC.DDDD会有内部build时候的build number或build id转化而来。也可以加入milestone build的标志,例如rtm,sp1,sp2等。

3)通常的情况,我们保持文件的版本和文件所在的产品的版本号一致。

二 DLL和EXE中文件版本和产品版本

1)NET 的DLL和EXE的文件和版本号

在NET的项目中,修改和产生文件的版本号和产品号很简单,该信息一般存储在 AssemblyInfo文件中,Csharp的工程为AssemblyInfo.cs,托管CPP的为AssemblyInfo.cpp。只需要在此文 件中修改如下属性然后重新build即可:

// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version 
//      Build Number
//      Revision
//
// You can specify all the values or you can default the Build and Revision Numbers 
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("9.0.40.5")]
[assembly: AssemblyFileVersion("9.0.0.4005")]
[assembly: AssemblyCompany("XXX Company")]
[assembly: AssemblyProduct("ProductVersionTestProduct")]
[assembly: AssemblyCopyright("XXX. 2010")]      

2)对于NativeCPP的项目,如果想使DLL或EXE包含文件或产品版本信息,必须在项目的Resource文件中存入Version信息,然后重新build即可。插入过程如下:

三 其他语言的产品版本信息

对于其他语言例如Python,Javascript,php,jsp等非PE文件,一般的我们要注意产品的About或Help可能出现产品版本信息的地方,通常版本信息会被定义为常量,当版本修改时只需要修改常量值即可。

四 Build时修改文件版本和产品版本

正常地需要在sync代码后,开始build前对项目中的文件和产品的版本信息进行修改,以保证新的build拥有新的文件版本和产品版本号,便于 区别。 具体地我们首先search到所有的assemblyinfo.cs,assemblyinfo.cpp,*.rc,*about.xxx等包含文件和产 品版本的文件,使用新的AAAA.BBBB.CCCC.DDDD来替换文件和版本信息替换。

五 其他

1) 可以使用VBA还获得文件的版本和产品版本

Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject")

Dim objFDOVer : objFDOVer = objFSO.GetFileVersion(DllPath)

2)我们也可以在build结束后使用第三方的工具来统一修改所有文件的文件和产品信息。 例如工具stampver(http://www.elphin.com/downloads/stampver/)但是目前只支持32bit文件,可惜!

六 Linux版本号实例

来看看Linux内核版本号2.6.27-2-i686 

主版本号。革命性改进,这个版本号在几年内应该不会升级 

次版本号。重大改进,偶数为稳定分支,奇数为实验分支

修正版本号。重大修正 

修补版本号。一些 BUGS 的修补 

目标架构。i686 表示 intel奔腾Ⅱ或以上级别 CPU

完!

感谢,Thanks!

作者:​​iTech​​

微信公众号: cicdops

github:​​https://github.com/cicdops/cicdops​​