C#发布版本的控制管理

本文探讨了在高频率版本迭代场景下,使用AssemblyInformationalVersion属性来解决版本号冲突问题的方法,并对比了AssemblyFileVersion与AssemblyInformationalVersion在实际应用中的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常见的版本控制,是在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的做法,走了一些小弯路,希望各位有处理经验的大佬给点心得意见~



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值