VS版本号定义、规则和相关的Visual Studio插件
我们就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年1月1日以来的天数,而修正版本号会是当天自午夜零点以来的秒数除以2所得的值。
我们看一个编译后的结果。

3. 相关的Visual Studio插件
上面.NET提供自动编号的方法在解决方案里有很多项目且想统一管理其版本号时就不能满足需求了,要保持统一就要每次编译前手动统一所有的版本信息了。
还好我们找到了一个插件:Versioning Controlled Build ,这里是作者的CodeProject上面的主页,里面有项目和使用方法的介绍。
在这里面可以统一管理解决方案里面的所有项目,可以按照自己的项目统一修改对应的版本号。

而在插件设置里面还提供了更多的选项已满足不同的自动编号需求。

更多的功能各位可以按照自己的需求去摸索与配置了。
因为CodeProject下载需要注册登录,为了方便下载我把插件放在了这里,点击下载。
出处:https://blog.csdn.net/cnhk1225/article/details/37500593
==============================================================================
我在使用VS2017创建的类库的项目的时候,想按照上面的说的[assembly: AssemblyVersion("1.0.*")]来自动增加版本号的,但是修改后,在编译的时候出错,错误提示如下:
错误 CS8357 指定的版本字符串中包含与确定性不兼容的通配符。从版本字符串删除通配符,或者禁用此编译的确定性 PVG.Lib E:\_yangjun台式机\Work\Git\PVG.Lib\PVG.Lib\Properties\AssemblyInfo.cs 35
这个情况我就奇怪了,为什么我的其他的项目都可以用,这个项目不可以这样用?于是我又创建了一些其他的类库等进行测试,同样的问题。从错误提示看应该是项目的配置不正确。
不死心啊,打开之前正常的自动版本号的程序和这个项目的文件(.csproj)进行比较,去掉项目文件和引用等,其实两个项目文件不同的地方不多,那就一个一个是试试,到底是哪个项目属性影响导致的问题。当试到<Deterministic>True</Deterministic>的时候,发现我新建的项目都是true,而之前的项目这个属性是false,修改成fasle编译测试,通过了,不报错了。于是拿<Deterministic>到网上查,说是.NET Core默认的设置。
由于时间比较紧,也没细查其他的,等有空了在查<Deterministic>的说明
-------------------------------------------------------------------------------------
再提供几个其他方式实现版本号的思路吧:
将增量(DateTime)信息添加到AssemblyFileVersion属性中,该属性具有不破坏任何依赖性的优点。
你可以结合使用预生成事件生成文件,添加该文件(包括其版本属性)然后使用一种方法来读出那些价值再次。
那是在项目的预生成,事件中:
echo [assembly:System.Reflection.AssemblyFileVersion("%date:~0,4%.%date:~5,2%%date:~8,2%.%time:~0,2%%time:~3,2%.%time:~6,2%")] > $(ProjectDir)Properties\VersionInfo.cs
将生成的VersionInfo.cs文件(Properties子文件夹)包含到项目中.
-------------------------------------------------------------------------------------
Cake支持AssemblyInfo文件修补。手中拿着蛋糕,你可以通过无限的方式实现自动版本递增。
像C#编译器那样递增版本的简单示例:
Setup(() =>
{
// Executed BEFORE the first task.
var datetimeNow = DateTime.Now;
var daysPart = (datetimeNow - new DateTime(2000, 1, 1)).Days;
var secondsPart = (long)datetimeNow.TimeOfDay.TotalSeconds/2;
var assemblyInfo = new AssemblyInfoSettings
{
Version = "3.0.0.0",
FileVersion = string.Format("3.0.{0}.{1}", daysPart, secondsPart)
};
CreateAssemblyInfo("MyProject/Properties/AssemblyInfo.cs", assemblyInfo);
});
参考:https://stackoverflow.com/questions/356543/can-i-automatically-increment-the-file-build-version-when-using-visual-studio
VS版本号定义、规则和相关的Visual Studio插件的更多相关文章
- VS软件版本号定义、规则和相关的Visual Studio插件
http://blog.csdn.net/cnhk1225/article/details/37500593 软件版本号主要标识了软件的版本,通过其可以了解软件.类库文件的当前版本,使得软件版本控制有 ...
- Visual Studio Code 和Visual Studio插件收集(持续更新)
Visual Studio Code 插件收集 Chinese (Simplified) Language Pack 默认刚安装的VSC是原味英文的,如果你用不习惯,非常简单,官方出品的简体中文语言包 ...
- 安装和配置SVN服务器Subversion、客户端TortoiseSVN和Visual Studio插件AnkhSvn
1.下载并安装服务器端Subversion下载地址:http://subversion.apache.org当前最新版本为1.8.10,默认安装目录为C:\Program Files\Subversi ...
- SVN客户端下载和Svn visual studio插件
1.Visual SVN Visual SVN visual studio插件 https://www.visualsvn.com/vis... 2.TortoiseSVN SVN客户端下载 http ...
- 12款好用的Visual Studio插件,最后一款良心推荐
目录 01 CodeMaid 02 Markdown Editor 03 ReSharper 04 GitHub Extension for Visual Studio 05 ZenCoding 06 ...
- .Net Core 常用开发工具(IDE和运行时、Visual Studio插件、Visual Studio Code插件)
IDE和运行时 组件名 描述 可选版本 推荐版本 Visual Studio Community 社区免费版 For Visual Studio 2017 For Visual Studio 2019 ...
- Visual Studio 插件的开发(转)
起因 在做项目的时候,经常需要根据表结构create一些实体类,写多了,实在是觉得无趣,于是就琢磨着做个代码生成工具.当然现在有很多现成的,拿来用就好,可是总想自己弄个出来玩玩,一来是当初用DataS ...
- 开发Visual Studio 插件
新建项目,在其他项目类型中找到扩展性,然后新建Visual Studio外接程序,VS中没有这个要安装SDK,http://yunpan.cn/cd27eNczKREwd (提取码:ab29)去下载 ...
- Visual Studio插件
不定时更新,得到最好用的插件.(友情提示:安装插件时最好先备份系统) 1.Resharper 10.0.0.12.VS10x CodeMAP3.JavaScript Map Parser4.JScri ...
随机推荐
- 开发中最好使用not exists 取代not in
开发中使用not in可能会存在致命的错误,在子查询中,如果存在空值,not in返回的数据就是空了,如下创建2张数据表: user表: 部门表: 现在要查询没有分配到用户的部门有哪些,使用not i ...
- java语言登陆界面(菜鸟版)
最近在看的Java入门书是<Head First Java>,一本很棒的Java书. 老师要求的程序流程图我没有,之前我们的做法是写完代码再画流程图,我想这样的做法是不对的,流程图应该是在 ...
- DataTable数据统计方法
调用方法: public object Compute(string strExpression,string strFilter) 参数说明: strExpression:要计算的表达式字符串,基本 ...
- JS(JQEERY) 获取JSON对象中的KEY VALUE
var json= { "Type": "Coding", "Height":100 }; for (var key in json) { ...
- navicat premium 连接出现的问题
1.listener does not currently know of service requested in connect descriptor 2.问题截图: 3.问题原因:服务名或者SI ...
- 解决Detected problems with API compatibility...
如果是10.3.0那么targetsdk改28.
- python-web-django前后端交互
1.前端请求数据URL由谁来写 在开发中,URL主要是由后台来写好给前端. 若后台在查询数据,需要借助查询条件才能查询到前端需要的数据时,这时后台会要求前端提供相关的查询参数(即URL请求的参数). ...
- this是什么!
this 1.js的关键字指定一个对象,然后去替代他 函数内的this 函数外的this 函数内的this指向行为发生的主体 函数外的this都指向window 2.函数内的this和函数在什么 ...
- DOM中offsetLeft与style.left的区别
offsetLeft 获取的是相对于父对象的左边距 left 获取或设置相对于 具有定位属性(position定义为relative)的父对象 的左边距 如果父div的position定义为relat ...
- 适配手机端之 rem
(function() { var psdWidth = 1080, maxRem = 100, ch = document.documentElement.clientHeight || docum ...