1. 程式人生 > >C#釋出版本的控制管理

C#釋出版本的控制管理

常見的版本控制,是在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的做法,走了一些小彎路,希望各位有處理經驗的大佬給點心得意見~