VS中设置版本号自动递增

摘要:
软件版本号主要标识软件版本,通过它可以知道软件和类库文件的当前版本,从而可以基于软件版本控制。根据Windows系统和的编号规则。NET Framework,软件版本号的定义结构一般如下:主版本号、子版本号和编译版本号。我们还可以在项目属性上看到设置修订版本号的界面。对应的英文名称为:major.minor.build。revisionMajor:名称相同但主要版本号不同的版本

软件版本号主要标识了软件的版本,通过其可以了解软件、类库文件的当前版本,使得软件版本控制有所依据。
我们就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

在设置页面里有一个是程序集版本号,一个是文件版本号。文件版本号主要用来为文件做标识,而程序集版本号用于CLR识别使用。

在我们确定了主版本号和子版本号后,编译版本号和修正版本号就需要在每次编译的时候去变动了,这样在程序测试、排错时才能快速定位到使用的是哪个编译出的版本,而不仅仅是通过文件创建时间去辨别。

在.NET里面提供了一个方法去自动对编译版本号和修正版本号进行设置的方法。

首先我们需要知道通过界面设置的版本信息是存储在项目里的AssemblyInfo.cs文件里的。

默认的设置是这样。

1 [assembly: AssemblyVersion("1.0.0.0")]
2 [assembly: AssemblyFileVersion("1.0.0.0")]

我们需要将主版本号和子版本号填写好,因为这部分是不会频繁变动的,而编译版本使用通配符*代替,并将文件版本信息注释掉,设置起来像这样。

1 [assembly: AssemblyVersion("1.0.*")]
2 //[assembly: AssemblyFileVersion("1.0.0.0")]  //如果需要自动增加版本号,需要注释这句代码,只用上面的一行

这样设置后生成的规则就是:编译版本号是自2000年1月1日以来的天数,而修正版本号会是当天自午夜零点以来的秒数除以2所得的值。

修改侯可能会提示:指定的版本字符串包含通配符,这与确定性不兼容。请删除版本字符串中的通配符,或禁用此编译的确定性

此时用记事本打开该项目的csproj文件,搜索Deterministic,将对应的选项由True改为False,或者直接删除该配置项即可。

    <Deterministic>false</Deterministic>

我们看一个编译后的结果

VS中设置版本号自动递增第1张

免责声明:文章转载自《VS中设置版本号自动递增》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[学习笔记]万能欧几里得Android网页浏览器的开发下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

LeftoverDataException,依赖包,apache license 2.0

1. poi3.9 LeftoverDataException org.apache.poi.hssf.record.RecordInputStream$LeftoverDataException: Initialisation of record 0x1D left 1 bytes remaining still to be read. at o...

转载别人的DLL DEll研究

昨日,编了个DLL和EXE来进行了下测试,exe通过lib静态联编dll,来调用它的导出类,当改变DLL中导出类的结构(eg.成员变量的顺序等),从新发布DLL而不从新联结编译EXE,就会造成错误的执行结果或崩溃!通过观察DLL和EXE生成的汇编代码,才知道生成的机器码中并无类的成员变量,只有类的Size(根据成员变量和有无虚函数)和类函数代码。    函...

adt-bundle更新eclipse,以及搭建android环境

曾经开发一直去android官网下载adt-bundle的。里面已经包括了eclipse和android SDK,搭建android环境特别方便,仅仅须要3步:1.下载并安装jdk(也就是jar se) 2.配置java环境变量 3.下载adt-bundle。这样就能够打卡eclipse直接开发Android了。 可是,adt-bundle有一个缺点就...

SQL Server:SQL Like 通配符特殊用法:Escape

 SQL Server:SQL Like 通配符特殊用法:Escape   %:匹配零个及多个任意字符; _:与任意单字符匹配; []:匹配一个范围; [^]:排除一个范围 Symbol Meaning like '5[%]' 5% like '[_]n' _n like '[a-cdf]' a, b, c, d, or f like...

VC编译选项

今天练习VC编译选项设置。现在有三个工程A、B和C;A和B是链接库,C是EXE的demo程序。B调用A,C调用B。 1.最初的编译是:A、B编为动态库,并生成LIB,C包含这个LIB,生成EXE。 这样是简单的,C的项目设置LINK属性页、Category为Input的选项中,填入A与B的LIB就可以了。 需要注意的是,在这里用到了多线程,在C/C++属...

powerbuilder 在pb里面怎么把文件编译成exe文件

生成exe步骤:(1)单击powerBar工具栏止的New按钮,打开New对话框,选择Project选项卡,选择Application Wizaard选项;(2)单击OK按钮,打开向导;(3)单击Next按钮进入定义应用所包含的库;(4)单击Next按钮,进入需要他建可执行的程序项目;(5)单击Next按钮,定义可热功当执行文件的名,如果项目包含资源文件,...