2018年2月11日 星期日

[從.Net工程師的角度來看DevOps][27]如何看.Net Dll版號和如何給.Net的Dll打上版號

image
圖片來源:https://pixabay.com/en/books-spine-colors-pastel-1099067/ 和 https://blog.xebialabs.com/2016/03/21/essential-devops-terms/

在上一篇([26]Package階段介紹)介紹完了Package階段主要做的兩個事情:打包的格式,以及用來區分差異的版號 (version)

在接下來的幾篇將會介紹和版號有關的內容。

這篇會從最基本的開始,在.Net裡面是如為某一個library產生出來的dll打上版號?如何看到這個版號的資訊呢?

有寫過的相關文章

一張表看懂dll版號的值和設定版號方式 - TL;DR

Assembly VersionFile VersionProduct Version
作用.Net Runtime對應
dll版本的時候看這個值
區別build出來的dll和上一個版本的差異。一般build資訊會放在這邊。產品的角度這個dll的版本
用nuget exe產生nuget的時候,會用這個作為nuget的版號
確認dll的版號值使用powershell:
[System.Reflection
.Assembly]
::LoadFrom("d:\xxx.dll")
.GetName().Version
檔案總管
右鍵
Property
Details 頁簽
File Version
檔案總管
右鍵
Property
Details 頁簽
Product Version
設定的Attribute名稱[assembly: AssemblyVersion("1.0.0.0")][assembly: AssemblyFileVersion("1.0.0.0")][assembly: AssemblyInformationalVersion("1.0.0.0")]

詳細說明往下看。

如何看dll的版號?

當dll build出來之後,可以直接對他點:

  1. 右鍵
  2. Property (內容)
  3. 切換到 頁簽 Details
裡面有兩個欄位有數字:
  1. File Version
  2. Product Version
image
建立出來的console版號

不過其實這個不是完整的版號內容,在dll裡面還有一個版號,這個版號是Assembly的版號,這個版號是.Net Reference dll看的版號。如果要看這個版號可以用powershell:

[System.Reflection.Assembly]::LoadFrom("d:\ConsoleApplication1.exe").GetName().Version
        
image
取得Assembly Version

從上面的資訊可以看出來,一個dll總共有3個版號:

  1. File Version
  2. Product Version
  3. Assembly Version
這3個版號的作用是什麼呢?

3個版號的差異是什麼?

Assembly Version
這個是.Net裡面內部再用的,所以當有reference某個dll,會包含一個版號的資訊。這個版號看的就是Assembly Version這個值。
File Version

原則上這個是用來區分build和build之間差異的版本資訊。因此,一般來說這個會包含像是build number這種資訊。

很有可能Assembly的版號還沒更新,但是在開發的過程,每一次build可能都不一樣,那麼這個時候File Version可能就會因此提升來表示這次build和上次build不同。

Product Version

這個主要用來表示,從一個產品的角度之間的差異。

如果用nuget建立出nuget的package,那麼nuget預設使用Product Version作為版號。

如何設定dll的版號?

到目前為止了解了3種不同版號的用意及如何看到這些版號的值,接下來就是如何在build的時候把這些版號資訊寫進去。

在建立任何專案的時候,都會自動建立出Properties\AssemblyInfo.cs這個檔案。

這個檔案包含一些dll的meta資訊,例如assembly的名稱,assembly描述等。其中一塊就是用來定義3個版號資訊。

這3個attribute分別為:

assembly: AssemblyVersion
對應到 Assembly Version
assembly: AssemblyFileVersion
對應到File Version
assembly: AssemblyInformationalVersion
對應到Product Version
其中 AssemblyInformationalVersion預設不存在,是需要自己手動添加。
image
設定內容的截圖

結語

這篇介紹了在.Net裡面的3個版號值的名稱,以及怎麼查到一個dll這三個值的方式。

再來介紹了如何在.Net專案透過設定Properties\AssemblyInfo.cs這個檔案來設定build出來的dll的3個值。

在下篇將會介紹版號的組成構架應該是如何,並且使用最常見的版號模式 SemVer 2.0(又稱為Semantic Version 2.0)


沒有留言 :

張貼留言