自從畢了業,好久沒更新了,今天突發奇想,過來更新一下,嘻嘻!
一般在做版本升級時,要鎖定版本號進行對比,然後聯網檢索可用的升級包資訊,在用VS做C#專案元件版本管理時,是一個很麻煩的事,每次Release之前都要硬核的去改AssemblyInfo.cs檔案的版本資訊,採用VS官方推薦的[assembly: AssemblyVersion("1.0.*")]格式最後生成的版本號是1.0.1589.39645之類的,留給自定義的只剩下前兩位,對於有個性的開發者明顯彰顯不出我們們的個性,所以下面和大家說一個相對來說比較好用的方法或邏輯,假設能有一個小程式在每次Release之前,去自動修改AssemblyInfo.cs檔案中對應的版本號,代替我們手動去修改,修改的值為某年某月某日到今天釋出的累計小時數,就達到了自動修改並向上疊加的目的,廢話不多說,上正文。
右擊專案屬性,選擇“生成事件”,輸入如下命令:
1 if $(ConfigurationName)==Release 2 ( 3 "$(SolutionDir)AutoVersion.exe" $(ProjectDir) 4 )
如下圖所示
其中的引數意義,可點選“編輯預先生成”按鈕後,開啟編輯介面,點選“巨集”按鈕檢視相應變數的值,此處不做過多的解釋,只需要記住這個是用於呼叫AutoVersion.exe程式並把當前專案檔案的根路徑作為引數傳進去的作用就行了,
下面說一下AutoVersion.exe程式的具體邏輯,首先獲取AssemblyInfo.cs問價的路徑,然後讀取該檔案中的AssemblyVersion的值,並對其進行修改,然後重新寫入到檔案中,具體程式碼如下:
1 using System; 2 using System.Collections.Generic; 3 using System.IO; 4 using System.Linq; 5 using System.Text; 6 using System.Xml; 7 8 namespace AutoVersion 9 { 10 class Program 11 { 12 static void Main(string[] args) 13 { 14 try 15 { 16 if (args.Length <= 0) 17 return; 18 if (!Directory.Exists(args[0])) 19 return; 20 string strPath = Path.Combine(args[0] + "/Properties/AssemblyInfo.cs"); 22 if (File.Exists(strPath)) 23 { 24 string[] strinfo = File.ReadAllLines(strPath, Encoding.UTF8); 25 DateTime startTime = new DateTime(2020, 1, 1); 26 TimeSpan ts = DateTime.Now - startTime; 27 int littleVersion = ts.Hours + ts.Days * 24; 28 29 for (int i = 0; i < strinfo.Length; i++) 30 { 31 string startStr = "AssemblyVersion(\""; 32 string endStr = "\")]"; 33 string pointStr = "."; 34 if (strinfo[i] != "" && strinfo[i].Contains(startStr) && strinfo[i].Contains(endStr) && strinfo[i].Contains(pointStr)) 35 { 36 string[] strArr = strinfo[i].Split('.'); 37 if (strArr != null && strArr.Length == 4) 38 { 39 int startIndex = strinfo[i].LastIndexOf(pointStr) + 1; 40 int endIndex = strinfo[i].IndexOf(endStr); 41 if (endIndex > startIndex) 42 { 43 string headerStr = strinfo[i].Substring(0, startIndex); 44 string enderStr = strinfo[i].Substring(endIndex, strinfo[i].Length - endIndex); 45 strinfo[i] = headerStr + littleVersion + enderStr; 46 } 47 } 48 } 49 } 50 File.WriteAllLines(strPath, strinfo, Encoding.UTF8); 51 } 52 } 53 catch (Exception ex) 54 { 55 Console.WriteLine(ex.ToString()); 56 } 57 } 58 } 59 }
Release生成AutoVersion.exe檔案,放到 $(SolutionDir) 的值所在的資料夾內,重新Release配置好的專案,即可修改相應的值,結果如下圖: