使用する .NET バージョンを選択する
この記事では、バージョンを選択するために .NET ツール、SDK、ランタイムによって使用されるポリシーについて説明します。 これらのポリシーは、指定されたバージョンを使用してアプリケーションを実行することと、開発者とエンドユーザーの両方のマシンを簡単にアップグレードできる間のバランスを提供します。 これらのポリシーでは、次の機能が有効になります。
- セキュリティと信頼性の更新プログラムなど、.NET の簡単で効率的な展開。
- ターゲット ランタイムに関係なく、最新のツールとコマンドを使用します。
バージョンの選択が行われます。
- SDK コマンドを実行すると、SDK はインストールされている最新のバージョンを使用します。
- アセンブリをビルドするとき、ターゲット フレームワーク モニカー はビルド時 APIを定義します。
- .NET アプリケーションを実行すると、ターゲット フレームワーク依存アプリ がロールフォワードを行います。
- 自己完結型アプリケーションを発行する場合、自己完結型デプロイには、選択したランタイムが含まれます。
このドキュメントの残りの部分では、これら 4 つのシナリオについて説明します。
SDK では、インストールされている最新バージョンが使用されます
SDK コマンドには、dotnet new
と dotnet run
が含まれます。 .NET CLI では、dotnet
コマンドごとに SDK バージョンを選択する必要があります。 次の場合でも、コンピューターに既定でインストールされている最新の SDK が使用されます。
- このプロジェクトは、以前のバージョンの .NET ランタイムを対象とします。
- .NET SDK の最新バージョンはプレビュー バージョンです。
以前の .NET ランタイム バージョンをターゲットにしながら、最新の SDK の機能と機能強化を利用できます。 同じ SDK ツールを使用して、異なるランタイム バージョンの .NET を対象にすることができます。
状況によっては、特定のバージョンの SDK を使用することが必要になる場合があります。 そのバージョンは、global.json ファイルで指定します。
global.json は、ファイル階層内の任意の場所に配置できます。 特定の global.json がファイル システム内の場所によって適用されるプロジェクトを制御します。 .NET CLI は、現在の作業ディレクトリからパスを上方向に移動する global.json ファイルを繰り返し検索します (プロジェクト ディレクトリと必ずしも同じではありません)。 最初に見つかった global.json ファイルは、使用されているバージョンを指定します。 その SDK バージョンがインストールされている場合は、そのバージョンが使用されます。 global.json で指定された SDK が見つからない場合、.NET CLI では、一致する規則 を使用して互換性のある SDK を選択するか、見つからない場合は失敗します。
次の例は、global.json 構文を示しています。
{
"sdk": {
"version": "5.0.0"
}
}
SDK バージョンを選択するプロセスは次のとおりです。
dotnet
は、現在の作業ディレクトリからパスを上方向に逆移動する global.json ファイルを繰り返し検索します。dotnet
は、最初に見つかった global.json で指定された SDK を使用します。dotnet
は、global.json が見つからない場合は、インストールされている最新の SDK を使用します。
SDK バージョンの選択の詳細については、global.json の概要 記事の「照合ルール」と「rollForward」セクションを参照してください。
SDK バージョンの更新
最新の機能、パフォーマンスの向上、バグ修正を採用するには、SDK の最新バージョンに定期的に更新することが重要です。 SDK の更新プログラムを簡単に確認するには、dotnet sdk check
コマンドを使用します。 さらに、global.jsonを使用して特定のバージョンを選択した場合は、Dependabot などのツールを検討して、新しいバージョンが使用可能になったときにピン留めされた SDK バージョンを自動的に更新します。
ターゲット フレームワーク モニカーはビルド時に使用するAPIを定義する
ターゲット フレームワーク モニカー (TFM) で定義されている API に対してプロジェクトをビルドします。 プロジェクト ファイルで ターゲット フレームワーク を指定します。 次の例に示すように、プロジェクト ファイルに TargetFramework
要素を設定します。
<TargetFramework>net8.0</TargetFramework>
複数の TFM に対してプロジェクトをビルドできます。 複数のターゲット フレームワークの設定は、ライブラリの方が一般的ですが、アプリケーションでも実行できます。 TargetFrameworks
プロパティ (複数形の TargetFramework
) を指定します。 ターゲット フレームワークは、次の例に示すようにセミコロンで区切られます。
<TargetFrameworks>net8.0;net47</TargetFrameworks>
特定の SDK では、固定のフレームワーク セットがサポートされ、付属するランタイムのターゲット フレームワークに制限されます。 たとえば、.NET 8 SDK には、net8.0
ターゲット フレームワークの実装である .NET 8 ランタイムが含まれています。 .NET 8 SDK では、net7.0
、net6.0
、および net5.0
がサポートされますが、net9.0
(またはそれ以上) はサポートされません。 net9.0
用にビルドする .NET 9 SDK をインストールします。
.NET Standard
.NET Standard は、.NET のさまざまな実装によって共有される API サーフェスをターゲットにする方法でした。 API 標準自体である .NET 5 のリリース以降、.NET Standard は、1 つのシナリオを除き、ほとんど関連性がありません。.NET Standard は、.NET と .NET Framework の両方をターゲットにする場合に便利です。 .NET 5 では、すべての .NET Standard バージョンが実装されています。
詳細については、.NET 5 と .NET Standard のを参照してください。
フレームワーク依存のアプリのロールフォワード
dotnet run
を使用してソースからアプリケーションを実行する場合、dotnet myapp.dll
を使用した フレームワーク依存の配置 から、または myapp.exe
を持つ フレームワーク依存の実行可能ファイル から実行する場合、dotnet
実行可能ファイルはアプリケーションの ホスト です。
ホストは、マシンにインストールされている最新のパッチ バージョンを選択します。 たとえば、プロジェクト ファイルに net5.0
を指定し、5.0.2
がインストールされている最新の .NET ランタイムである場合、5.0.2
ランタイムが使用されます。
許容される 5.0.*
バージョンが見つからない場合は、新しい 5.*
バージョンが使用されます。 たとえば、net5.0
を指定し、5.1.0
のみがインストールされている場合、アプリケーションは 5.1.0
ランタイムを使用して実行されます。 この動作は、"マイナー バージョンのロールフォワード" と呼ばれます。下位バージョンも考慮されません。 許容されるランタイムがインストールされていない場合、アプリケーションは実行されません。
いくつかの使用例は、5.0 をターゲットとする場合の動作を示しています。
- ✔️ 5.0 が指定されています。 5.0.3 は、インストールされている最も高いパッチ バージョンです。 5.0.3 が使用されます。
- ❌ 5.0 が指定されています。 5.0.* バージョンはインストールされていません。 3.1.1 は、インストールされている最も高いランタイムです。 エラー メッセージが表示されます。
- ✔️ 5.0 が指定されています。 5.0.* バージョンはインストールされていません。 5.1.0 は、インストールされている最も高いランタイム バージョンです。 5.1.0 が使用されます。
- ❌ 3.0 が指定されています。 3.x バージョンはインストールされていません。 5.0.0 は、インストールされている最も高いランタイムです。 エラー メッセージが表示されます。
マイナー バージョンのロールフォワードには、エンド ユーザーに影響する可能性がある副作用が 1 つ含まれます。 次のシナリオを考えてみましょう。
- アプリケーションは、5.0 が必要であることを指定します。
- 実行すると、バージョン 5.0.* はインストールされませんが、5.1.0 はインストールされます。 バージョン 5.1.0 が使用されます。
- その後、ユーザーは 5.0.3 をインストールし、アプリケーションをもう一度実行します。5.0.3 が使用されます。
特にバイナリ データのシリアル化などのシナリオでは、5.0.3 と 5.1.0 の動作が異なる可能性があります。
ロールフォワード動作を制御する
既定のロールフォワード動作をオーバーライドする前に、.NET ランタイム互換性のレベルを理解します。
アプリケーションのロールフォワード動作は、次の 4 つの方法で構成できます。
<RollForward>
プロパティを設定して、プロジェクト レベルの設定を行います。<PropertyGroup> <RollForward>LatestMinor</RollForward> </PropertyGroup>
*.runtimeconfig.json
ファイル。このファイルは、アプリケーションをコンパイルするときに生成されます。
<RollForward>
プロパティがプロジェクトで設定されている場合は、*.runtimeconfig.json
ファイルでrollForward
設定として再現されます。 ユーザーはこのファイルを編集して、アプリケーションの動作を変更できます。{ "runtimeOptions": { "tfm": "net5.0", "rollForward": "LatestMinor", "framework": { "name": "Microsoft.NETCore.App", "version": "5.0.0" } } }
dotnet
コマンドの--roll-forward <value>
プロパティ。アプリケーションを実行する場合は、コマンド ラインを使用してロールフォワード動作を制御できます。
dotnet run --roll-forward LatestMinor dotnet myapp.dll --roll-forward LatestMinor myapp.exe --roll-forward LatestMinor
DOTNET_ROLL_FORWARD
環境変数。
優先順位
ロールフォワード動作は、アプリの実行時に次の順序で設定され、番号付きの項目が小さい項目よりも優先されます。
- まず、
*.runtimeconfig.json
構成ファイルが評価されます。 - 次に、
DOTNET_ROLL_FORWARD
環境変数が考慮され、前のチェックがオーバーライドされます。 - 最後に、実行中のアプリケーションに渡される
--roll-forward
パラメーターは、他のすべてをオーバーライドします。
価値観
ただし、ロールフォワード設定を設定した場合は、次のいずれかの値を使用して動作を設定します。
価値 | 説明 |
---|---|
Minor |
既定の (指定されていない場合)。 要求されたマイナー バージョンがない場合は、最下位のマイナー バージョンにロールフォワードします。 要求されたマイナー バージョンが存在する場合は、 LatestPatch ポリシーが使用されます。 |
Major |
要求されたメジャー バージョンがない場合は、次に利用可能な上位メジャー バージョンと最小マイナー バージョンにロールフォワードします。 要求されたメジャー バージョンが存在する場合は、Minor ポリシーが使用されます。 |
LatestPatch |
最も高いパッチ バージョンにロールフォワードします。 この値により、マイナー バージョンのロールフォワードが無効になります。 |
LatestMinor |
要求されたマイナー バージョンが存在する場合でも、最上位のマイナー バージョンにロールフォワードします。 |
LatestMajor |
要求されたメジャーが存在する場合でも、最上位のメジャー バージョンで最上位のマイナー バージョンにロール フォワードします。 |
Disable |
ロールフォワードせず、指定したバージョンにのみバインドします。 このポリシーは、最新のパッチにロールフォワードする機能を無効にするため、一般的な使用には推奨されません。 この値は、テストにのみ推奨されます。 |
自己完結型のデプロイには、選択したランタイムが含まれます
アプリケーションは、自己完結型配布として発行できます。 この方法では、.NET ランタイムとライブラリがアプリケーションにバンドルされます。 自己完結型のデプロイは、ランタイム環境に依存しません。 ランタイム バージョンの選択は、実行時ではなく発行時に行われます。
復元 発行時に発生するイベントは、特定のランタイム ファミリの最新のパッチ バージョンを選択します。 たとえば、.NET 5 ランタイム ファミリの最新のパッチ バージョンである場合、dotnet publish
は .NET 5.0.3 を選択します。 ターゲット フレームワーク (インストールされている最新のセキュリティ パッチを含む) は、アプリケーションと共にパッケージ化されます。
アプリケーションに指定された最小バージョンが満たされていない場合、エラーが発生します。 dotnet publish
は、最新のランタイム パッチ バージョン (特定の major.minor バージョン ファミリ内) にバインドされます。 dotnet publish
では、dotnet run
のロールフォワード セマンティクスはサポートされていません。 修正プログラムと自己完結型の展開の詳細については、.NET アプリケーションの展開 ランタイムパッチの選択 に関する記事を参照してください。
自己完結型のデプロイでは、特定のパッチ バージョンが必要になる場合があります。 次の例に示すように、プロジェクト ファイルの最小ランタイム パッチ バージョン (上位または下位バージョン) をオーバーライドできます。
<PropertyGroup>
<RuntimeFrameworkVersion>5.0.7</RuntimeFrameworkVersion>
</PropertyGroup>
RuntimeFrameworkVersion
要素は、既定のバージョン ポリシーをオーバーライドします。 自己完結型デプロイの場合、RuntimeFrameworkVersion
はランタイム フレームワークのバージョン 正確 を指定します。 フレームワークに依存するアプリケーションの場合、RuntimeFrameworkVersion
は、必要なランタイム フレームワークの最小バージョン を指定します。
関連項目
- Dependabot は、エコシステムとリポジトリをサポートしています。
- .NETをダウンロードしてインストールします。
- .NET が既にインストールされていることを確認する方法。
- .NET ランタイムと SDKを削除する方法について説明します。
.NET