.NET ランタイムと .NET SDK では、さまざまな頻度で新機能が追加されます。 一般に、SDK はランタイムよりも頻繁に更新されます。 この記事では、ランタイムと SDK のバージョン番号について説明します。
.NET では、毎年 11 月に新しいメジャー バージョンがリリースされます。 .NET 6 や .NET 8 などの偶数リリースは、長期サポート (LTS) リリースです。 LTS リリースでは、3 年間、無料サポートとパッチを利用できます。 奇数のリリースは、標準期間サポート (STS) リリースです。 標準期間のサポート リリースでは、2 年間 (.NET 9 以降) 無料のサポートとパッチが提供されます。
バージョン管理の詳細
.NET ランタイムには、 セマンティック バージョン管理に続くバージョン管理に対する major.minor.patch アプローチがあります。
ただし、.NET SDK はセマンティック バージョン管理に従いません。 .NET SDK のリリースが高速化され、そのバージョン番号は、アラインされたランタイムと SDK 独自のマイナー リリースとパッチ リリースの両方を伝える必要があります。
.NET SDK バージョン番号の最初の 2 つの位置は、リリースされた .NET Runtime のバージョンと一致します。 SDK の各バージョンでは、このランタイムまたは任意の下位バージョンのアプリケーションを作成できます。
SDK バージョン番号の 3 番目の位置は、マイナー番号とパッチ番号の両方を伝えます。 マイナー バージョンに 100 を乗算します。 最後の 2 桁はパッチ番号を表します。 マイナー バージョン 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.200 | ランタイムパッチでは、ランタイムパッチ番号が更新されます。 SDK は変更されません。 |
前の表から、いくつかのポリシーを確認できます。
- ランタイムと SDK は、メジャー バージョンとマイナー バージョンを共有します。 特定の SDK とランタイムの最初の 2 つの数値が一致している必要があります。 上記の例はすべて、.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は年に 1 回インクリメントされ、次のものが含まれる場合があります。- 製品の大幅な変更、または新しい製品の方向。
- API によって、破壊的変更が導入された。 破壊的変更を受け入れるための高いハードルがあります。
- 既存の依存関係の新しい
MAJORバージョンが採用されています。
メジャー リリースは年に 1 回行われ、偶数バージョンは長期サポート (LTS) リリースです。 このバージョン管理スキームを使用する最初の LTS リリースは .NET 6 です。 LTS 以外の最新バージョンは .NET 9 です。
MINORは、次の場合にインクリメントされます。- パブリック API のサーフェス領域が追加されました。
- 新しい動作が追加されます。
- 既存の依存関係の新しい
MINORバージョンが採用されています。 - 新しい依存関係が導入されました。
PATCHは、次の場合にインクリメントされます。- バグ修正が行われました。
- 新しいプラットフォームのサポートが追加されました。
- 既存の依存関係の新しい
PATCHバージョンが採用されています。 - その他の変更は、前のケースの 1 つに適合しません。
複数の変更がある場合、個々の変更の影響を受ける最も高い要素がインクリメントされ、次のものが 0 にリセットされます。 たとえば、 MAJOR をインクリメントすると、 MINOR.PATCH は 0 にリセットされます。
MINORをインクリメントすると、PATCHは 0 にリセットされますが、MAJORは同じままです。
ファイル名のバージョン番号
.NET 用にダウンロードされたファイルには、 dotnet-sdk-5.0.301-win-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 Runtime メジャー バージョンにアップグレードした後、大規模なアプリでいくつかの修正が必要になると予想されます。
既定では、.NET アプリは特定の .NET Runtime メジャー バージョンで実行するように構成されているため、新しい .NET Runtime メジャー バージョンで実行するようにアプリをアップグレードするには再コンパイルを強くお勧めします。 次に、アップグレード後にアプリを再テストして、問題を特定します。
アプリの再コンパイルによるアップグレードが不可能であるとします。 その場合、.NET ランタイムは、コンパイルされたバージョンよりも上位のメジャー .NET ランタイム バージョンでアプリを実行できるようにするための 追加設定 を提供します。 これらの設定では、アプリを上位のメジャー .NET ランタイム バージョンにアップグレードする場合のリスクは変わりません。また、アップグレード後にアプリを再テストする必要があります。
.NET ランタイムでは、以前のバージョンの .NET ランタイムを対象とするライブラリの読み込みがサポートされています。 新しいメジャー .NET ランタイム バージョンにアップグレードされたアプリは、以前の .NET ランタイム バージョンを対象とするライブラリと NuGet パッケージを参照できます。 アプリによって参照されるすべてのライブラリと NuGet パッケージのターゲット ランタイム バージョンを同時にアップグレードする必要はありません。
こちらも参照ください
.NET