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 ...
随机推荐
- window.location.replace()与window.location.href()区别
有3个页面 a,b,c 如果当前页面是c页面,并且c页面是这样跳转过来的:a->b->c 1:b->c 是通过window.location.replace("..xx/c ...
- oracle截取字符串区间段的一部分字符串
Oracle SQL中实现indexOf和lastIndexOf功能,substr和instr用法 博客分类: oracle PL/SQL instrsubstrlastindexofindexofo ...
- 百度地图API示例:鼠标绘制点线面 控件修改
需求 :在使用地图API时,绘制工具栏控件想自己选择哪些要,哪些不要. 可以查看相应的类:官网地址: http://api.map.baidu.com/library/DrawingManager/1 ...
- mvc4使用KindEditor文本编辑器
最近做项目要用文本编辑器,编辑器好多种,这里介绍KindEditor在asp.net mvc4中的使用方法. 一.准备工作: 1.下载KindEditor.去官网:http://www.kindsof ...
- request 的下载文件
前言:Content-Type类型为octets/stream,这种一般是文件类型了,比如有时候需要导出excel数据,下载excel这种场景如何用python来实现呢? 1.点击导出按钮 2.代码实 ...
- Oracle 12c 容器讲解
Oracle 12c一个重要新特性是插接式数据库. 插接式数据库由一个使用 CDB(Container Database)选项创建的容器数据库和一个或多个 PDB(Pluggable Database ...
- chromium ⑤
我们都知道chromium是用webkit完成页面显示的, 那么chromium是怎样集成和封装webkit的呢? 是怎样将webkit整合到自己的框架中,并将一个页面渲染出来的? 这篇我 ...
- 《团队-Python 爬取豆瓣电影top250-成员简介及分工》
杨继尧,没有什么擅长的,会一点python,一点c#,爬取利用数据库,有些用法不太会,但是会在实现项目中查资料.
- django重定向是如何实现的,用的什么状态码?
1,使用HTTPresponseredirect from django,http,import HttpResponseRedirect 2,使用redirct 和reverse 状态码:301和3 ...
- SQL注入之Sqli-labs系列第十一关(基于单引号的万能密码注入)
本来以前写过sqli-labs的实战文章,但由于搞了事情,自己的服务器IP被封了,到期后又不太想续了,就一直没管.心酸的痛,都懂的....... 好了,最近这两天一口气写完前十关GET型的,现在到了P ...