日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

高级进阶:Azure DevOps搞定.NET Core编译版本号自增

發布時間:2023/12/4 asp.net 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 高级进阶:Azure DevOps搞定.NET Core编译版本号自增 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點擊上方藍字關注“汪宇杰博客”

熟悉.NET Framework的人知道,我們可以通過指定AssemblyVersion為10.0.*來讓編譯器自增版本號。但是.NET Core和.NET Standard不行。即使有MSBump這樣的開源項目,也有一定的缺陷。一般這樣的需求會出現在CI/CD服務器上。我們來看看如何用Azure DevOps輕松搞定。

關于.NET Core應用版本號


我曾經諧過一篇詳細的.NET Core應用版本號的文章:https://edi.wang/post/2018/9/27/get-app-version-net-core有興趣的可以先閱讀一下,因為本文的內容會基于文中的知識。(域名可能被HX,微信用戶可以復制到瀏覽器打開)我們這次要控制的,是Version字段。

就是它

使用.NET Core CLI的build命令直接編譯出來的DLL會顯示這個版本。

但其實,build命令是可以加參數的,想要在不更改csproj文件的情況下build一個自定義版本可以加個/p參數,指定Version,這樣搞:

dotnet build /p:Version=10.0.8888.1234

基于這個原理,我們就能控制.NET Core應用程序在編譯環境的版本號。

為毛不用 MSBump

可能有朋友知道這么一個項目:MSBump,也能用來在編譯時改變版本號。但是,它在編譯時候會去改csproj文件,對于代碼來說是一次更改。而傳統.NET Fx的編譯系統不會改代碼。這對于我來說是無法接受的,因為引入了不可控的因素。在多人團隊本地build完竟然還要簽入僅僅是更改了版本號的csproj文件,不是一種好方法。并且它的默認規則,不是根據時間戳來增加版本號的,而是根據本機當前工程文件的版本。所以在多人協作的代碼庫里對導致版本混亂。因此我決定放棄MSBump,盡量用微軟自家技術,解決自家問題。

自動生成版本號

在全自動的CI環境,我們不可能每次手工干預指定版本號。我需要一種規則和方法去生成每次都不一樣,并且一眼就能判斷新舊的版本號。

我個人使用的規則是:主.次.距2000年1月1日的天數.幸運數字

其中要計算的是距2000年1月1日的天數。可以用Windows計算器按出來,也可以寫程序算。但在自己動手造輪子之前,一個好習慣是看看微軟是否已經有現成的工具可以完成。當然,微軟一定是有的:PowerShell

PowerShell計算兩個日期之間相差的天數,非常簡單:

$baseDate = [datetime]"01/01/2000"

$currentDate = $(Get-Date)

$interval = NEW-TIMESPAN –Start $baseDate –End $currentDate

$days = $interval.Days

配置 Azure DevOps

有了以上的知識。我們要做的,就是讓Azure DevOps在編譯時,自動計算出版本號,然后給build命令加上/p:Version參數。怎么做呢?很簡單!

環境變量

首先,我們需要一個變量,比如叫做 buildNumber

在編譯定義的variables里可以添加。隨便指定一個版本號就行。

PowerShell 任務

我們要使用PowerShell計算版本號,并給剛才那個 buildNumber 變量賦值。所以,添加一個PowerShell任務,放在最前面。

給Azure DevOps編譯管線里的變量賦值,有個神奇的技巧,就是用Write-Host就可以了:

##vso[task.setvariable variable=變量名稱]變量值

所以最終我們的腳本是

Write-Host "Generating Build Number"

$baseDate = [datetime]"01/01/2000"

$currentDate = $(Get-Date)

$interval = NEW-TIMESPAN –Start $baseDate –End $currentDate

$days = $interval.Days

Write-Host "##vso[task.setvariable variable=buildNumber]10.0.$days.1024"

在任務屬性里選擇inline,復制粘貼了這段代碼。 //能跑就行,實在不行,刪庫跑路,也挺省心。

更改.NET Core任務參數

BuildPublish任務的Arguments后面都加上:

/p:Version=$(buildNumber)

注意/p的前面有個空格

重跑編譯,大功告成

觸發一個CI/CD管線,可以看到日志中已經輸出了正確的版本和參數。

并且部署完后,也能得到正確的版本了:

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的高级进阶:Azure DevOps搞定.NET Core编译版本号自增的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。