版本控制
軟體庫在 1.0 版中很少是完整的。 良好的連結庫會隨著時間演進、新增功能、修正 Bug,以及改善效能。 確保您能夠發布新版本的 .NET 程式庫而不影響現有用戶的使用。
重大變更
有關處理版本間重大變更的資訊,請參閱 重大變更。
版本號碼
.NET 連結庫有許多方式可以指定版本。 這些版本最為重要:
NuGet 套件版本
NuGet 套件版本 會顯示在 NuGet.org 和 Visual Studio NuGet 套件管理員上,並在使用套件時新增至原始程式碼。 NuGet 套件版本是使用者通常會看到的版本號碼,並且當他們談論所使用的程式庫版本時,會參考它。 NuGet 套件版本是由 NuGet 使用,而且不會影響運行時間行為。
<PackageVersion>1.0.0-alpha1</PackageVersion>
與 NuGet 套件版本結合的 NuGet 套件識別碼可用來識別 NuGet 中的套件。 例如,Newtonsoft.Json
+ 11.0.2
。 附有後綴的套件是發行前版本套件,具有特殊特性,因此非常適合用於測試。 如需詳細資訊,請參閱 發行前版本套件。
因為 NuGet 套件版本是開發人員最明顯的版本,所以最好使用 語意版本設定 (SemVer)來更新它。 SemVer 指出版本之間變更的意義,並協助開發人員在選擇要使用的版本時做出明智的決策。 例如,從 1.0
到 2.0
表示可能有重大變更。
✔️ 請考慮使用 SemVer 2.0.0 來設定 NuGet 套件的版本。
✔️ 請務必在公開檔中使用 NuGet 套件版本,因為它是使用者通常會看到的版本號碼。
✔️ DO 會在發行非不穩定的套件時包含發行前版本後綴。 (如需將 API 標示為預覽或實驗性的詳細資訊,請參閱 預覽 API。
用戶必須選擇取得發行前版本套件,因此他們瞭解套件尚未完成。
組件版本
元件版本是 CLR 在執行時期用來選擇要載入的元件版本。 使用版本設定來選取元件時,只適用於具有強名稱的元件。
<AssemblyVersion>1.0.0.0</AssemblyVersion>
.NET Framework CLR 要求確切匹配才能載入強名稱元件。 例如,Library1, Version=1.0.0.0
是以參考 Newtonsoft.Json, Version=11.0.0.0
的方式編譯。 .NET Framework 只會載入該確切版本 11.0.0.0
。 若要在運行時間載入不同的版本,必須將系結重新導向新增至 .NET 應用程式的組態檔。
強式命名與元件版本結合,可讓 嚴格的元件版本載入。 雖然強式命名連結庫有許多優點,但通常會導致找不到元件的運行時間例外狀況,而且 需要在 app.config
或 web.config
中 系結重新導向。 在 .NET Core 中,元件載入更加鬆散。 .NET(Core) 執行階段會在執行時自動載入具有較高版本的組件。
✔️ 請考慮只在 AssemblyVersion 中包含主要版本。
例如,Library 1.0 和 Library 1.0.1 都有
1.0.0.0
的 AssemblyVersion,而 Library 2.0 的 AssemblyVersion 為2.0.0.0
。 當元件版本變更頻率較低時,它會減少系結重新導向。
✔️ 請考慮保持 AssemblyVersion 的主要版本號碼和 NuGet 套件版本同步。
AssemblyVersion 包含在向用戶顯示的一些資訊訊息中,例如,例外狀況訊息中的元件名稱和元件限定型別名稱。 維護版本之間的關聯性,可為開發人員提供更多其使用版本的相關信息。
❌ 沒有固定的 AssemblyVersion。
雖然未變更的 AssemblyVersion 可避免需要系結重新導向,但表示只有單一版本的元件可以安裝在全域程式集緩存 (GAC) 中。 此外,如果另一個應用程式對 GAC 元件進行會導致中斷的變更更新,則任何參考 GAC 中該元件的應用程式都會失效。
組件檔案版本
元件檔版本是用來在 Windows 中顯示檔案版本,而且不會影響運行時間行為。 設定此版本是選擇性的。 它會顯示在 Windows 檔案總管的 [檔案屬性] 對話框中:
<FileVersion>11.0.2.21924</FileVersion>
✔️ 請考慮將持續整合組建編號納入 AssemblyFileVersion 修訂。
例如,您正在建置專案的 1.0.0 版,而持續整合組建編號是 99,因此您的 AssemblyFileVersion 為 1.0.0.99。
✔️ 請使用格式 Major.Minor.Build.Revision
作為檔案版本的格式。
雖然 .NET 永遠不會使用檔案版本,Windows 預期檔案版本 為
Major.Minor.Build.Revision
格式。 如果版本未遵循此格式,則會引發警告。
元件資訊版本
元件資訊版本是用來記錄其他版本資訊,而且不會影響運行時間行為。 設定此版本是選擇性的。 如果您使用Source Link,則會使用NuGet套件版本加上原始檔控制版本,在組建上設定此版本。 例如,1.0.0-beta1+204ff0a
包含建置元件所建置之原始程式碼的認可哈希。 如需詳細資訊,請參閱 Source Link。
<InformationalVersion>The quick brown fox jumped over the lazy dog.</InformationalVersion>
注意
如果此版本未遵循格式 Major.Minor.Build.Revision
,則舊版 Visual Studio 會引發組建警告。 您可以放心忽略警告。
❌ 避免自行設定元件資訊版本。
允許 SourceLink 自動產生包含 NuGet 和原始檔控制元數據的版本。