在上一篇([26]Package階段介紹)介紹完了Package階段主要做的兩個事情:打包的格式,以及用來區分差異的版號 (version)。
在接下來的幾篇將會介紹和版號有關的內容。
這篇會從最基本的開始,在.Net裡面是如為某一個library產生出來的dll打上版號?如何看到這個版號的資訊呢?
有寫過的相關文章
- [.Net]Dll明明有在,為什麼出現找不到DLL錯誤 - 一次搞懂如何處理Dll版本問題(Dll Hell) - 這篇介紹的是如何在runtime的時候選擇想要執行的版本 - 也就是那個版號
一張表看懂dll版號的值和設定版號方式 - TL;DRAssembly Version File Version Product 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")]
Assembly Version | File Version | Product Version | |
---|---|---|---|
作用 | .Net Runtime對應 dll版本的時候看這個值 | 區別build出來的dll和上一個版本的差異。一般build資訊會放在這邊。 | 從產品的角度這個dll的版本 用nuget exe產生nuget的時候,會用這個作為nuget的版號 |
確認dll的版號值 | 使用powershell: [System.Reflection | 檔案總管 右鍵 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出來之後,可以直接對他點:
右鍵
Property (內容)
- 切換到 頁簽
Details
- File Version
- Product Version
不過其實這個不是完整的版號內容,在dll裡面還有一個版號,這個版號是Assembly的版號,這個版號是.Net Reference dll看的版號。如果要看這個版號可以用powershell:
[System.Reflection.Assembly]::LoadFrom("d:\ConsoleApplication1.exe").GetName().Version
從上面的資訊可以看出來,一個dll總共有3個版號:
- File Version
- Product Version
- Assembly Version
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
預設不存在,是需要自己手動添加。 結語
這篇介紹了在.Net裡面的3個版號值的名稱,以及怎麼查到一個dll這三個值的方式。
再來介紹了如何在.Net專案透過設定Properties\AssemblyInfo.cs
這個檔案來設定build出來的dll的3個值。
在下篇將會介紹版號的組成構架應該是如何,並且使用最常見的版號模式 SemVer 2.0(又稱為Semantic Version 2.0)