アプリまたはライブラリでフレームワークをターゲットに設定するときは、アプリまたはライブラリで使用できるようにする API のセットを指定します。 プロジェクト ファイルでターゲット フレームワークを指定するには、ターゲット フレームワーク モニカー (TFM) を使用します。
アプリまたはライブラリは、.NET Standard のバージョンを対象にすることができます。 .NET Standard バージョンは、すべての.NET実装で標準化された API のセットを表します。 たとえば、ライブラリは Standard 1.6 .NETターゲットにして、同じコードベースを使用して .NET Core と .NET Framework 全体で機能する API にアクセスできます。
アプリまたはライブラリは、特定の.NET実装をターゲットにして、実装固有の API にアクセスすることもできます。 たとえば、Universal Windows Platform (UWP、uap10.0) を対象とするアプリは、Windows 10を実行するデバイス用にコンパイルされる API にアクセスできます。
.NET Framework などの一部のターゲット フレームワークでは、API はフレームワークがシステムにインストールするアセンブリによって定義され、アプリケーション フレームワーク API (ASP.NET など) が含まれる場合があります。
パッケージ ベースのターゲット フレームワーク (.NET 5 以降、.NET Core、.NET Standard など) の場合、API はアプリまたはライブラリに含まれる NuGet パッケージによって定義されます。
最新バージョン
次の表は、最も一般的なターゲット フレームワーク、それらがどのように参照されているか、および実装する .NET Standard のバージョンを定義しています。 これらのターゲット フレームワークのバージョンは、最新の安定したバージョンです。 プレリリース バージョンは記載されていません。 target フレームワーク モニカー (TFM) は、.NET アプリまたはライブラリのターゲット フレームワークを指定するための標準化されたトークン形式です。
| ターゲット フレーム | 最新 安定バージョン |
ターゲット フレームワーク識別子 (TFM) | 実装済み .NET Standard バージョン |
|---|---|---|---|
| .NET 10 | 10 | net10.0 | 2.1 |
| .NET 9 | 9 | net9.0 | 2.1 |
| .NET 8 | 8 | net8.0 | 2.1 |
| .NET Standard | 2.1 | netstandard2.1 | 該当なし |
| .NET Core | 3.1 | netcoreapp3.1 | 2.1 |
| .NET Framework | 4.8.1 | net481 | 2.0 |
サポート対象のターゲット フレームワーク
ターゲット フレームワークは、通常、TFM によって参照されます。 次の表に、.NET SDK と NuGet クライアントでサポートされるターゲット フレームワークを示します。 同等のものがかっこ内に示されています。 たとえば、win81 は netcore451 と同等の TFM です。
| ターゲット フレームワーク | TFM |
|---|---|
| .NET 5+ (および .NET Core) | netcoreapp1.0 netcoreapp1.1 netcoreapp2.0 netcoreapp2.1 netcoreapp2.2 netcoreapp3.0 netcoreapp3.1 net5.0* net6.0* net7.0* net8.0* net9.0* net10.0* |
| .NET Standard | netstandard1.0 netstandard1.1 netstandard1.2 netstandard1.3 netstandard1.4 netstandard1.5 netstandard1.6 netstandard2.0 netstandard2.1 |
| .NET Framework | net11 ネット20 net35 ネット40 ネット403 net45 net451 net452 net46 net461 net462 net47 net471 net472 net48 (ネット48) net481 |
| Windows ストア | netcore [netcore45] netcore45 [win] [win8] netcore451 [win81] |
| .NET nanoFramework | netnano1.0 |
| .NET Micro Framework | netmf |
| Silverlight | sl4 sl5 |
| Windows Phone | wp [wp7] wp7 wp75 wp8 wp81 wpa81 |
| Universal Windows Platform | uap [uap10.0] uap10.0 [win10] [netcore50] |
* .NET 5 以降の TFM には、オペレーティング システム固有のバリエーションがいくつか含まれています。 詳細については、OS 固有の TFM に関する次のセクションを参照してください。
OS に特化した TFM
net8.0、net9.0、net10.0の TFM には、さまざまなプラットフォームで動作するテクノロジが含まれています。
OS 固有の TFM を指定すると、オペレーティング システムに固有の API (Windows Formsや iOS バインドなど) をアプリで使用できるようになります。 OS 固有の TFM は、ベース TFM で使用可能なすべての API (net10.0 TFM など) も継承します。
次の表は、.NET 8 つ以上の TFM の互換性を示しています。
| TFM | 互換性あり |
|---|---|
net8.0 |
(net7.0 の後続バージョン) |
net8.0-android |
(net7.0-android の後続バージョン) |
net8.0-browser |
net8.0 から継承されるすべてのもの |
net8.0-ios |
(net7.0-ios の後続バージョン) |
net8.0-maccatalyst |
(net7.0-maccatalyst の後続バージョン) |
net8.0-macos |
(net7.0-macos の後続バージョン) |
net8.0-tizen |
(net7.0-tizen の後続バージョン) |
net8.0-tvos |
(net7.0-tvos の後続バージョン) |
net8.0-windows |
(net7.0-windows の後続バージョン) |
net9.0 |
(net8.0 の後続バージョン) |
net9.0-android |
(net8.0-android の後続バージョン) |
net9.0-browser |
(net8.0-browser の後続バージョン) |
net9.0-ios |
(net8.0-ios の後続バージョン) |
net9.0-maccatalyst |
(net8.0-maccatalyst の後続バージョン) |
net9.0-macos |
(net8.0-macos の後続バージョン) |
net9.0-tizen |
(net8.0-tizen の後続バージョン) |
net9.0-tvos |
(net8.0-tvos の後続バージョン) |
net9.0-windows |
(net8.0-windows の後続バージョン) |
net10.0 |
(net9.0 の後続バージョン) |
net10.0-android |
(net9.0-android の後続バージョン) |
net10.0-browser |
(net9.0-browser の後続バージョン) |
net10.0-ios |
(net9.0-ios の後続バージョン) |
net10.0-maccatalyst |
(net9.0-maccatalyst の後続バージョン) |
net10.0-macos |
(net9.0-macos の後続バージョン) |
net10.0-tizen |
(net9.0-tizen の後続バージョン) |
net10.0-tvos |
(net9.0-tvos の後続バージョン) |
net10.0-windows |
(net9.0-windows の後続バージョン) |
異なるプラットフォーム間でアプリを移植可能にしつつ、OS 固有の API に引き続きアクセスするために、OS 固有の複数の TFM をターゲットにして、#if プリプロセッサ ディレクティブを使用して OS 固有の API 呼び出しに対してプラットフォーム ガードを追加することができます。 使用可能なシンボルの一覧については、「プリプロセッサ シンボル」 を参照してください。
推奨されるターゲット
次のガイドラインを使用して、アプリで使用する TFM を決定します。
- 複数のプラットフォームに移植可能なアプリの場合、ベース TFM (
net10.0など) をターゲットにする必要があります。 これには、ほとんどのライブラリだけでなく、ASP.NET Coreと Entity Framework も含まれます。 - プラットフォーム固有のライブラリの場合、プラットフォーム固有のフレーバーをターゲットにする必要があります。 たとえば、WinForms プロジェクトと WPF プロジェクトは、
net10.0-windowsをターゲットにする必要があります。 - クロスプラットフォーム アプリケーション モデル (ASP.NET Core など) は、少なくともベース TFM (
net10.0など) をターゲットにする必要がありますが、さらに多くの API や機能を明るくするために、プラットフォーム固有の追加のフレーバーをターゲットにすることもできます。
TFM 内の OS バージョン
OS 固有の TFM の末尾でオプションの OS バージョンを指定することもできます (例: net8.0-ios17.2)。 バージョンによって、アプリまたはライブラリで使用できる API を指定します。 アプリまたはライブラリが実行時にサポートする OS バージョンは制御されません。 これは、プロジェクトのコンパイルに使用する参照アセンブリを選択し、NuGet パッケージからアセットを選択するために使用されます。 このバージョンは、ランタイム OS バージョンからあいまいさを解消するために、"プラットフォーム バージョン" または "OS API バージョン" と考えてください。
.NET SDK は、新しいバージョンのベース TFM なしで、個々のプラットフォームで新しくリリースされた API をサポートできるように設計されています。 これにより、.NETのメジャー リリースを待たずにプラットフォーム固有の機能にアクセスできます。 TFM のプラットフォーム バージョンをインクリメントすることで、これらの新しくリリースされた API にアクセスできます。 たとえば、Android プラットフォームが .NET 8.0.x SDK 更新プログラムで API レベル 34 API を追加した場合、TFM net8.0-android34.0 を使用してアクセスできます。
OS 固有の TFM でプラットフォーム バージョンが明示的に指定されていない場合は、ベース TFM とプラットフォーム名から推論できる暗黙の値を持ちます。 たとえば、.NET 9 の Android の既定のプラットフォーム バージョンは 35.0 です。つまり、net9.0-android は正規の net9.0-android35.0 TFM の短縮形です。 短縮形はプロジェクト ファイルでのみ使用することを目的としており、NuGet などの他のツールに渡される前に、.NET SDK の MSBuild ターゲットによって正規形式に拡張されます。
次の表は、.NET リリースごとの Android および iOS 用の default ターゲット プラットフォーム バージョン (TPV) を示しています。 最新のバインディングを使用する場合は、既定値を使用します (つまり、OS バージョンを指定しないでください)。
| .NET バージョン | Android | iOS |
|---|---|---|
| .NET 8 | 34.0 | 17.2 |
| .NET 9 | 35.0 | 18.0 |
| .NET 10 | 36.0 | 18.7 |
.NET 9 以降、サービス リリースで新しい TPV (常に major バージョン番号が.NETバージョンが最初にリリースされたときと同じ) のサポートが導入された場合、その.NETバージョンでサポートされている最も早い TPV は引き続きサポートされます。 たとえば、.NET 9 の場合、サービス リリースで最新の iOS 18.x バージョンのサポートが追加された場合でも、サポートされている最も古い iOS バージョン 18.0 は引き続きサポートされます。
注
.NET 8 以前の Apple プラットフォーム (iOS、macOS、tvOS、Mac Catalyst) では、既定の TPV は、現在インストールされているワークロードでサポートされている最新バージョンです。 つまり、たとえば、.NET 8 で iOS ワークロードを更新すると、そのワークロードに新しいバージョンの iOS のサポートが追加されている場合、既定の TPV が高くなる可能性があります。 前の表では、既定の TPV は、指定された.NET バージョンの初期リリースのバージョンです。
.NET 9 以降、この特殊な動作は、executable プロジェクトにのみ適用されます。 ライブラリ プロジェクトの既定の TPV は、他のすべてのプラットフォームと同様に、メジャー .NET リリース全体で同じままになりました。
優先順位
アプリが、異なる TFM の複数のアセットを含むパッケージを参照する場合、バージョン番号が近いアセットが優先されます。 たとえば、アプリが net9.0-ios をターゲットとし、パッケージが net9.0 と net8.0-ios のアセットを提供する場合、net9.0 のアセットが使用されます。 詳細については、「優先順位」を参照してください。
以前のバージョンの OS をサポートする
プラットフォーム固有のアプリまたはライブラリはその OS の特定のバージョンの API に対してコンパイルされますが、プロジェクト ファイルに SupportedOSPlatformVersion プロパティを追加することで、以前のバージョンの OS と互換性を持たせることができます。
SupportedOSPlatformVersion プロパティにより、アプリまたはライブラリを実行するために必要な最小 OS バージョンを指定できます。 プロジェクトでこの最小ランタイム OS バージョンを明示的に指定しない場合、TFM のプラットフォーム バージョンが既定値になります。
以前のバージョンの OS でアプリを正常に実行するために、そのバージョンの OS には存在しない API を呼び出すことはできません。 ただし、新しい API の呼び出しにガードを追加して、その API がサポートされているバージョンの OS で実行する場合にのみ呼び出されるようにすることができます。 このパターンを使用すると、新しいバージョンの OS での実行時には新しい OS 機能を利用しながら、以前のバージョンの OS での実行もサポートされるようにアプリまたはライブラリを設計することができます。
SupportedOSPlatformVersion の値 (明示的でも既定値でも) はプラットフォーム互換性アナライザーによって使用され、新しい API へのガードなしの呼び出しが検出されて警告されます。 これは、プロジェクトのコンパイル済みアセンブリに UnsupportedOSPlatformAttribute アセンブリ属性として書き込まれます。これにより、プラットフォーム互換性アナライザーで、より小さい SupportedOSPlatformVersion 値でのプロジェクトからそのアセンブリの API へのガードなしの呼び出しを検出できるようになります。 プラットフォームによっては、SupportedOSPlatformVersion 値がプラットフォーム固有のアプリのパッケージ化とビルド プロセスに影響します。これはそれらのプラットフォームに関するドキュメントで説明されています。
次の例は、 TargetFramework プロパティと SupportedOSPlatformVersion MSBuild プロパティを使用して、アプリまたはライブラリが iOS 15.0 API にアクセスできるが、iOS 13.0 以降での実行をサポートしていることを指定するプロジェクト ファイルの抜粋です。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0-ios15.0</TargetFramework>
<SupportedOSPlatformVersion>13.0</SupportedOSPlatformVersion>
</PropertyGroup>
...
</Project>
ターゲット フレームワークを指定する方法
ターゲット フレームワークはプロジェクト ファイルで指定します。 単一のターゲット フレームワークを指定するときは、TargetFramework 要素を使用します。 次のコンソール アプリ プロジェクト ファイルは、.NET 10 をターゲットにする方法を示しています。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
</Project>
複数のターゲット フレームワークを指定する場合は、各ターゲット フレームワークのアセンブリを条件付きで参照できます。 コードでは、プリプロセッサ シンボル と if-then-else ロジックを使うことで、これらのアセンブリに対して条件付きでコンパイルできます。
次のライブラリ プロジェクトは、.NET Standard (netstandard1.4) と .NET Framework (net40 および net45) の API を対象としています。 ターゲット フレームワークが複数あるときは、複数形の TargetFrameworks 要素を使用します。
Condition 属性には、2 つの .NET Framework TFM 用にライブラリをコンパイルするときに実装固有のパッケージが含まれます。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard1.4;net40;net45</TargetFrameworks>
</PropertyGroup>
<!-- Conditionally obtain references for the .NET Framework 4.0 target -->
<ItemGroup Condition=" '$(TargetFramework)' == 'net40' ">
<Reference Include="System.Net" />
</ItemGroup>
<!-- Conditionally obtain references for the .NET Framework 4.5 target -->
<ItemGroup Condition=" '$(TargetFramework)' == 'net45' ">
<Reference Include="System.Net.Http" />
<Reference Include="System.Threading.Tasks" />
</ItemGroup>
</Project>
ライブラリまたはアプリ内で、プリプロセッサ ディレクティブを使用して各ターゲット フレームワーク用にコンパイルするための条件付きコードを記述します。
public class MyClass
{
static void Main()
{
#if NET40
Console.WriteLine("Target framework: .NET Framework 4.0");
#elif NET45
Console.WriteLine("Target framework: .NET Framework 4.5");
#else
Console.WriteLine("Target framework: .NET Standard 1.4");
#endif
}
}
TargetFramework 値はエイリアスです
TargetFramework プロパティ値 (たとえば、net10.0) は、.NET SDK が正規モニカー プロパティに変換するフレンドリ名 (エイリアス) です。 具体的には、SDK は TargetFramework 値から次のプロパティを設定します。
-
TargetFrameworkMoniker(例:.NETCoreApp,Version=v10.0) -
TargetFrameworkIdentifier(例:.NETCoreApp) -
TargetFrameworkVersion(例:v10.0) -
TargetPlatformMoniker、TargetPlatformIdentifier、およびTargetPlatformVersion(特定のプラットフォームを対象とする場合)
NuGet と .NET SDK は、パッケージの互換性チェックとビルド ロジックのために、TargetFramework 文字列ではなく、これらのモニカー プロパティを使用します。 この変換は、OS 固有の TFM に対して既に行われます。 たとえば、net10.0-windows は、TargetFrameworkMoniker = .NETCoreApp,Version=v10.0 および TargetPlatformMoniker = Windows,Version=7.0 に変換されます。
エイリアスは単なる名前であるため、対応するモニカー プロパティが正しく設定されている限り、 TargetFramework 値には任意の英数字文字列を指定できます。 次のプロジェクト ファイルでは、banana という名前のカスタム エイリアスを使用し、.NET 10.0 に対してプロジェクトがビルドおよび復元されるようにモニカー プロパティを明示的に設定します。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>banana</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition=" '$(TargetFramework)' == 'banana' ">
<TargetFrameworkIdentifier>.NETCoreApp</TargetFrameworkIdentifier>
<TargetFrameworkVersion>v10.0</TargetFrameworkVersion>
<TargetFrameworkMoniker>.NETCoreApp,Version=v10.0</TargetFrameworkMoniker>
</PropertyGroup>
</Project>
これらのプロパティの詳細については、 TargetFramework MSBuild プロパティ リファレンスを参照してください。
プリプロセッサ シンボル
SDK スタイル プロジェクトを使用する場合、ビルド システムは、「サポートされるターゲット フレームワークのバージョン」の表で示されているターゲット フレームワークを表すプリプロセッサ シンボルを認識します。 .NET Standard、.NET Core、または .NET 5+ TFM をプリプロセッサ シンボルに変換するには、ドットとハイフンをアンダースコアに置き換え、小文字を大文字に変更します (たとえば、netstandard2.0 の記号は NETSTANDARD2_0)。
DisableImplicitFrameworkDefines プロパティを使用して、これらのシンボルの生成を無効にすることができます。 このプロパティの詳細については、「DisableImplicitFrameworkDefines」を参照してください。
.NETターゲット フレームワークのプリプロセッサ シンボルの完全な一覧は次のとおりです。
| ターゲット フレームワーク | 記号 | 追加のシンボル (.NET 5 つ以上の SDK で利用可能) |
プラットフォーム シンボル (使用可能なのは のみ) OS に特化した TFM を指定する場合にのみ使用可能です。 |
|---|---|---|---|
| .NET Framework |
NETFRAMEWORK、 NET481、 NET48、 NET472、 NET471、 NET47、 NET462、 NET461、 NET46、 NET452、 NET451、 NET45、 NET40、 NET35、 NET20 |
NET48_OR_GREATER、 NET472_OR_GREATER、 NET471_OR_GREATER、 NET47_OR_GREATER、 NET462_OR_GREATER、 NET461_OR_GREATER、 NET46_OR_GREATER、 NET452_OR_GREATER、 NET451_OR_GREATER、 NET45_OR_GREATER、 NET40_OR_GREATER、 NET35_OR_GREATER、 NET20_OR_GREATER |
|
| .NET Standard |
NETSTANDARD、 NETSTANDARD2_1、 NETSTANDARD2_0、 NETSTANDARD1_6、 NETSTANDARD1_5、 NETSTANDARD1_4、 NETSTANDARD1_3、 NETSTANDARD1_2、 NETSTANDARD1_1、 NETSTANDARD1_0 |
NETSTANDARD2_1_OR_GREATER、 NETSTANDARD2_0_OR_GREATER、 NETSTANDARD1_6_OR_GREATER、 NETSTANDARD1_5_OR_GREATER、 NETSTANDARD1_4_OR_GREATER、 NETSTANDARD1_3_OR_GREATER、 NETSTANDARD1_2_OR_GREATER、 NETSTANDARD1_1_OR_GREATER、 NETSTANDARD1_0_OR_GREATER |
|
| .NET 5+ (および .NET Core) |
NET、 NET10_0、 NET9_0、 NET8_0、 NET7_0、 NET6_0、 NET5_0、 NETCOREAPP、 NETCOREAPP3_1、 NETCOREAPP3_0、 NETCOREAPP2_2、 NETCOREAPP2_1、 NETCOREAPP2_0、 NETCOREAPP1_1、 NETCOREAPP1_0 |
NET10_0_OR_GREATER、 NET9_0_OR_GREATER、 NET8_0_OR_GREATER、 NET7_0_OR_GREATER、 NET6_0_OR_GREATER、 NET5_0_OR_GREATER、 NETCOREAPP3_1_OR_GREATER、 NETCOREAPP3_0_OR_GREATER、 NETCOREAPP2_2_OR_GREATER、 NETCOREAPP2_1_OR_GREATER、 NETCOREAPP2_0_OR_GREATER、 NETCOREAPP1_1_OR_GREATER、 NETCOREAPP1_0_OR_GREATER |
ANDROID、 BROWSER、 IOS、 MACCATALYST、 MACOS、 TVOS、 WINDOWS、[OS][version] (例: IOS15_1)、[OS][version]_OR_GREATER (例: IOS15_1_OR_GREATER) |
注
- バージョンレスのシンボルは、ターゲットとするバージョンに関係なく定義されます。
- バージョン固有のシンボルは、対象とするバージョンに対してのみ定義されます。
-
<framework>_OR_GREATERシンボルは、ターゲットとするバージョンとそれ以前のすべてのバージョンに対して定義されます。 たとえば、.NET Framework 2.0 を対象とする場合は、NET20、NET20_OR_GREATER、NET11_OR_GREATER、およびNET10_OR_GREATERという記号が定義されます。 -
NETSTANDARD<x>_<y>_OR_GREATERシンボルは、.NET Core や .NET Framework など、.NET Standard を実装するターゲットではなく、.NET Standard ターゲットに対してのみ定義されます。 - これらは、MSBuild
TargetFrameworkプロパティと NuGet で使用されるターゲット フレームワーク モニカー (TFM) とは異なります。
非推奨のターゲット フレームワーク
次のターゲット フレームワークは非推奨とされます。 これらのターゲット フレームワークをターゲットにするパッケージは、指定されている代替のものに移行する必要があります。
| 非推奨の TFM | 置換 |
|---|---|
| aspnet50 aspnetcore50 dnxcore50 dnx dnx45 dnx451 dnx452 |
netcoreapp |
| dotnet dotnet50 dotnet51 dotnet52 dotnet53 dotnet54 dotnet55 dotnet56 |
netstandard |
| netcore50 | uap10.0 |
| 勝利 | netcore45 |
| Windows 8 | netcore45 |
| win81 | netcore451 |
| Windows 10 | uap10.0 |
| winrt | netcore45 |
関連項目
.NET