常见的版本控制,是在AssemblyInfo里面对AssemblyVersion和AssemblyFileVersion的Atrribute这些属性进行值设定。
版本递增和自定义版本的方式居多。
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.6")]
[assembly: AssemblyFileVersion("1.0.0.6")]
但是业务要求有时一天发布N个版本,因为对四个位的定义不同,决定了目前这个版本号在实际过程中大概率作废。
云端存在两种服务版本 一种格式为1.0.0.* ,另一种为40,即会存在1.0.0.6,40和1.0.0.6,41的版本情况。
在参考下面的链接之后
https://www.cnblogs.com/liqingwen/p/5944391.html
决定使用Assmbly集中的AssemblyInformationalVersion属性
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.6")]
[assembly: AssemblyFileVersion("1.0.0.6")]
[assembly:AssemblyInformationalVersion("40")]
在生成的exe属性-详细信息中,产品版本值为40,文件版本值为1.0.0.6,
那是不是意味着AssemblyFileVersion这个属性值的值被AssemblyInformationaVersion给覆盖了呢?
通过查证
var fileVersion = Attribute.GetCustomAttribute(System.Reflection.Assembly.GetEntryAssembly(), typeof(System.Reflection.AssemblyFileVersionAttribute));
var informationVersion = Attribute.GetCustomAttribute(System.Reflection.Assembly.GetEntryAssembly(), typeof(System.Reflection.AssemblyInformationalVersionAttribute)) as System.Reflection.AssemblyInformationalVersionAttribute;
fileVersion值依然为1.0.0.6,informationVersion为40,说明在exe属性呈现时,AssemblyInformationaVersion属性的优先级要高于AssemblyFileVersion,但是不会相互覆盖,那么就愉快的解决了这次的业务需求了。
Ps:在用FileVersionInfo类跨目录读取文件时,读取到的信息有两个属性都变为了40,ProductMajorPart 与ProductVersion。这里暂不做深究,留待下次继续学习。
在使用Assembly之前,也考虑了xml和config的做法,走了一些小弯路,希望各位有处理经验的大佬给点心得意见~