.NET 的版本設定方式
.NET 執行階段和 .NET SDK (英文) 會以不同的頻率新增新功能。 一般而言,SDK 會較執行階段更頻繁地更新。 此文章說明執行階段與 SDK 版本號碼。
.NET 會於每年 11 月發行一個新的主要版本。 偶數編號的版本,例如 .NET 6 或 .NET 8,是長期支援 (LTS)。 LTS 版本提供 3 年的免費支援和修補檔。 奇數版本為標準期間支援。 標準期間支援提供 18 個月的免費支援和修補檔。
版本控制的詳細資料
.NET 執行階段有版本設定的 major.minor.patch 方法,可允許語意版本設定 (英文)。
不過,.NET SDK 不遵循語意版本設定。 .NET SDK 發行速度比較快,而且其版本號碼必須同時傳達對應的執行階段與 SDK 的自有次要與修補檔發行版本。
.NET SDK 版本號碼的前兩位數會符合其發行的 .NET 執行階段版本。 SDK 的每個版本都可以針對此執行階段或任何較低的版本建立應用程式。
SDK 版本號碼的第三個位置同時傳達次要與修補號碼。 次要版本會被乘以 100。 最後兩位數代表修補號碼。 次要版本 1、修補版本 2 將以 102 表示。 例如,以下是執行階段和 SDK 版本號碼的可能順序:
變更 | .NET 執行階段 | .NET SDK (*) | 備註 |
---|---|---|---|
初始版本 | 5.0.0 | 5.0.100 | 初始版本。 |
SDK 修補程式 | 5.0.0 | 5.0.101 | 此 SDK 修補檔未變更執行階段。 SDK 修補檔提升了 SDK 修補檔中的最後一位數。 |
執行階段與 SDK 修補程式 | 5.0.1 | 5.0.102 | 執行階段修補檔提升了執行階段修補檔編號。 SDK 修補檔提升了 SDK 修補檔中的最後一位數。 |
SDK 功能變更 | 5.0.1 | 5.0.200 | 執行階段修補檔未變更。 新的 SDK 功能增加了 SDK 修補檔中的第一位數。 |
執行階段修補檔 | 5.0.2 | 5.0.102 | 執行階段修補檔提升了執行階段修補檔編號。 SDK 不會變更。 |
從上表中,您可以看到幾項原則:
- 執行階段和 SDK 共用主要和次要版本。 指定 SDK 和執行階段的前兩個數字應該相符。 上述所有範例都是 .NET 5.0 版本資料流的一部分。
- 只有在更新執行階段時,執行階段的修補檔版本才會增加。 SDK 修補檔編號不會更新執行階段修補檔。
- 只有在 SDK 更新時,SDK 的修補檔版本才會更新。 執行階段修補檔可能不需要 SDK 修補檔。
注意:
- 若 SDK 在執行階段功能更新之前有 10 個功能更新,版本號碼會計入 1000 系列。 版本 5.0.1000 會在版本 5.0.900 之後。 此情況不應該發生。
- 不會發生沒有功能發行版本的 99 修補發行版本。 若發行版本接近此號碼,它會強制功能發行版本。
您可以在 dotnet/designs 存放庫 \(英文\) 中查看此初始提案的詳細資訊。
語意化版本控制系統
.NET 執行階段大致上遵循語意式版本控制 (SemVer) 並採用 MAJOR.MINOR.PATCH
版本控制,使用版本號碼的不同部分來描述變更的程度和類型。
MAJOR.MINOR.PATCH[-PRERELEASE-BUILDNUMBER]
選擇性的 PRERELEASE
和 BUILDNUMBER
組件絕對不會是受支援版本的一部分,並只會存在於每日組建、來自來源目標的本機組建,以及未支援的預覽版本上。
了解執行階段版本號碼變更
MAJOR
會一年遞增一次,且可能包含:- 產品或新產品方向發生重大變更。
- API 引進了中斷性變更。 接受中斷性變更的標準較高。
- 採用現有相依性的較新
MAJOR
版本。
主要版本每年都會發生一次,偶數編號的版本是長期支援 (LTS) 版本。 使用此版本設定配置的第一個 LTS 版本是 .NET 6。 最新的非 LTS 版本是 .NET 5。
MINOR
的遞增時機為:- 新增公用 API 介面區。
- 新增新的行為。
- 採用現有相依性的較新
MINOR
版本。 - 引入新的相依性。
PATCH
的遞增時機為:- 已修正 Bug。
- 新增對較新平台的支援。
- 採用現有相依性的較新
PATCH
版本。 - 任何其他不符合其中一個先前案例的變更。
當有多項變更時,因個別變更而影響的最高項目就會遞增,而下列項目會重設為零。 例如,當 MAJOR
遞增時,MINOR.PATCH
會重設為零。 MINOR
遞增時,PATCH
會重設為零,同時 MAJOR
會維持相同。
檔案名稱中的版本號碼
針對 .NET 下載的檔案具有版本,例如 dotnet-sdk-5.0.301-win10-x64.exe
。
預覽版本
預覽版本會將 -preview.[number].[build]
附加至版本號碼。 例如: 6.0.0-preview.5.21302.13
。
服務版本
版本發行之後,版本分支通常會停止產生每日組建,改為開始產生服務組建。 服務版本會將 -servicing-[number]
附加至版本。 例如: 5.0.1-servicing-006924
。
.NET 執行階段相容性
.NET 執行階段會維護版本之間的高相容性。 一般來說,.NET 應用程式應該在升級至新的主要 .NET 執行階段版本之後能夠繼續運作。
每個主要 .NET 執行階段版本都包含刻意、經仔細審查和記載的中斷性變更。 記載的中斷性變更不是升級後可能會影響應用程式的唯一問題來源。 例如,.NET 執行階段的效能改善 (未被視為中斷性變更) 可能會公開潛在應用程式執行緒錯誤,導致應用程式在該版本上無法運作。 在升級至新的 .NET 執行階段主要版本之後,大型應用程式應該需要一些修正程式。
根據預設,.NET 應用程式會設定為在指定的 .NET 執行階段主要版本上執行,因此強烈建議您將應用程式升級,以在新 .NET 執行階段主要版本上執行。 然後在升級後重新測試應用程式,以找出任何問題。
假設無法透過應用程式重新編譯進行升級。 在該情況下,.NET 執行階段會提供額外的設定,讓應用程式能夠在比編譯的版本更高的主要 .NET 執行階段版本上執行。 這些設定不會變更將應用程式升級至較高主要 .NET 執行階段版本時所涉及的風險,而且仍然需要在升級後重新測試應用程式。
.NET 執行階段支援載入以較舊 .NET 執行階段版本為目標的程式庫。 升級至較新主要 .NET 執行階段版本的應用程式可以參考以舊版 .NET 執行階段為目標的程式庫和 NuGet 封裝。 不需要同時升級應用程式所參考的所有程式庫和 NuGet 封裝的目標執行階段版本。
另請參閱
- .NET 中的中斷性變更
- 目標架構
- .NET 發佈封裝 (部分機器翻譯)
- .NET 支援週期資料表
- 適用於 .NET 的 Docker 映像 (英文)