前两篇文章在编译配置和ClickOnce发布Winform的时候都遇到了软件版本号的设置,这篇文章就来说说软件版本号的设置原则。
1. 软件版本号的定义
软件版本号主要标识了软件的版本,通过其可以了解软件、类库文件的当前版本,使得软件版本控制有所依据。我们就Windows系统和.NET Framework的编号规则来看,软件版本号的定义结构一般是这样:
主版本号.子版本号.编译版本号.修正版本号
我们也可以在项目属性上可以看到相关设置的界面,对应的英文名称分别为:major.minor.build.revision
Major:具有相同名称但不同主版本号的程序集不可互换。例如,这适用于对产品的大量重写,这些重写使得无法实现向后兼容性。当有极大的更新时,会增加major的版号。
Minor:如果两个程序集的名称和主版本号相同,而次版本号不同,这指示显著增强,但照顾到了向后兼容性。例如,这适用于产品的修正版或完全向后兼容的新版本。而当有大更新,但不至于更新major时,会更新minor的版号。
Build:内部版本号的不同表示对相同源所作的重新编译。这适合于更改处理器、平台或编译器的情况。若更新比较小,例如只是除虫(bug fixing),则会更新build的版号。
Revision:名称、主版本号和次版本号都相同但修订号不同的程序集应是完全可互换的。这适用于修复以前发布的程序集中的安全漏洞。程序集的只有内部版本号或修订号不同的后续版本被认为是先前版本的修补程序 (Hotfix) 更新。当在同一个Build下需要重新编译,那么就需要增加Revision即可。
所以一般的版本信息设置看起来应该是这样:
1
1.1
1.1.*
1.1.1
1.1.1.*
1.1.1.1
2. .NET里自动编号的方法
在设置页面里有一个是程序集版本号,一个是文件版本号。文件版本号主要用来为文件做标识,而程序集版本号用于CLR识别使用。
在我们确定了主版本号和子版本号后,编译版本号和修正版本号就需要在每次编译的时候去变动了,这样在程序测试、排错时才能快速定位到使用的是哪个编译出的版本,而不仅仅是通过文件创建时间去辨别。
在.NET里面提供了一个方法去自动对编译版本号和修正版本号进行设置的方法。
首先我们需要知道通过界面设置的版本信息是存储在项目里的AssemblyInfo.cs文件里的。
默认的设置是这样。
2 [assembly: AssemblyFileVersion("1.0.0.0")]
我们需要将主版本号和子版本号填写好,因为这部分是不会频繁变动的,而编译版本使用通配符*代替,并将文件版本信息注释掉,设置起来像这样。
2 //[assembly: AssemblyFileVersion("1.0.0.0")]
这样设置后生成的规则就是:编译版本号是自2000年2月1日以来的天数,而修正版本号会是自午夜零点以来的秒数除以2所得的值。
我们看一个编译后的结果。
3. 相关的Visual Studio插件
上面.NET提供自动编号的方法在解决方案里有很多项目且想统一管理其版本号时就不能满足需求了,要保持统一就要每次编译前手动统一所有的版本信息了。
还好我们找到了一个插件:Versioning Controlled Build ,这里是作者的CodeProject上面的主页,里面有项目和使用方法的介绍。
在这里面可以统一管理解决方案里面的所有项目,可以按照自己的项目统一修改对应的版本号。
而在插件设置里面还提供了更多的选项已满足不同的自动编号需求。
更多的功能各位可以按照自己的需求去摸索与配置了。
因为CodeProject下载需要注册登录,为了方便下载我把插件放在了这里,点击下载。