SDK スタイルのプロジェクトでのターゲット フレームワークTarget frameworks in SDK-style projects

アプリまたはライブラリでフレームワークをターゲットに設定するときは、アプリまたはライブラリで使用できるようにする API のセットを指定します。When you target a framework in an app or library, you're specifying the set of APIs that you'd like to make available to the app or library. プロジェクト ファイルでターゲット フレームワークを指定するには、ターゲット フレームワーク モニカー (TFM) を使用します。You specify the target framework in your project file using a target framework moniker (TFM).

アプリまたはライブラリでは、.NET Standard のバージョンをターゲットにできます。An app or library can target a version of .NET Standard. .NET Standard のバージョンは、.NET のすべての実装で標準化された API のセットを表します。.NET Standard versions represent standardized sets of APIs across all .NET implementations. たとえば、ライブラリは、.NET Standard 1.6 をターゲットにして、.NET Core と .NET Framework で機能する API に同じコードベースを使ってアクセスできます。For example, a library can target .NET Standard 1.6 and gain access to APIs that function across .NET Core and .NET Framework using the same codebase.

また、アプリまたはライブラリは、.NET の特定の実装をターゲットにして、実装固有の API にアクセスすることもできます。An app or library can also target a specific .NET implementation to gain access to implementation-specific APIs. たとえば、Xamarin.iOS (Xamarin.iOS10 など) をターゲットにするアプリからは Xamarin が提供する iOS 10 用の iOS API ラッパーにアクセスでき、ユニバーサル Windows プラットフォーム (UWP、uap10.0) をターゲットにするアプリからは Windows 10 を実行するデバイス用にコンパイルできる API にアクセスできます。For example, an app that targets Xamarin.iOS (for example, Xamarin.iOS10) has access to Xamarin-provided iOS API wrappers for iOS 10, or an app that targets Universal Windows Platform (UWP, uap10.0) has access to APIs that compile for devices that run Windows 10.

.NET Framework などの一部のターゲット フレームワークでは、API はフレームワークがシステムにインストールするアセンブリによって定義され、アプリケーション フレームワーク API (ASP.NET など) を含む場合があります。For some target frameworks, such as .NET Framework, the APIs are defined by the assemblies that the framework installs on a system and may include application framework APIs (for example, ASP.NET).

パッケージ ベースのターゲット フレームワーク (.NET 5、.NET Core、.NET Standard など) では、API はアプリまたはライブラリに含まれる NuGet パッケージによって定義されます。For package-based target frameworks (for example, .NET 5, .NET Core, and .NET Standard), the APIs are defined by the NuGet packages included in the app or library.

最新バージョンLatest versions

次の表では、最も一般的なターゲット フレームワーク、それらの参照方法、およびそれらが実装する .NET Standard のバージョンを定義します。The following table defines the most common target frameworks, how they're referenced, and which version of .NET Standard they implement. これらのターゲット フレームワークのバージョンは、最新の安定したバージョンです。These target framework versions are the latest stable versions. プレリリース バージョンは記載されていません。Pre-release versions aren't shown. ターゲット フレームワーク モニカー (TFM) は、.NET アプリまたはライブラリのターゲット フレームワークを指定するための標準化されたトークン形式です。A target framework moniker (TFM) is a standardized token format for specifying the target framework of a .NET app or library.

ターゲット フレームTarget framework 最新Latest
安定バージョンstable version
ターゲット フレームワーク モニカー (TFM)Target framework moniker (TFM) 実装済みImplemented
.NET Standard バージョン.NET Standard version
.NET 5.NET 5 5.05.0 net5.0net5.0 該当なしN/A
.NET Standard.NET Standard 2.12.1 netstandard2.1netstandard2.1 該当なしN/A
.NET Core.NET Core 3.13.1 netcoreapp3.1netcoreapp3.1 2.12.1
.NET Framework.NET Framework 4.84.8 net48net48 2.02.0

サポート対象のターゲット フレームワークSupported target frameworks

ターゲット フレームワークは、通常、TFM によって参照されます。A target framework is typically referenced by a TFM. 次の表に、.NET SDK および NuGet クライアントによってサポートされるターゲット フレームワークを示します。The following table shows the target frameworks supported by the .NET SDK and the NuGet client. 同等のものがかっこ内に示されています。Equivalents are shown within brackets. たとえば、win81netcore451 と同等の TFM です。For example, win81 is an equivalent TFM to netcore451.

[対象とする Framework]Target Framework TFMTFM
.NET 5+ (および .NET Core).NET 5+ (and .NET Core) netcoreapp1.0netcoreapp1.0
netcoreapp1.1netcoreapp1.1
netcoreapp2.0netcoreapp2.0
netcoreapp2.1netcoreapp2.1
netcoreapp2.2netcoreapp2.2
netcoreapp3.0netcoreapp3.0
netcoreapp3.1netcoreapp3.1
net5.0
net6.0
net5.0
net6.0
.NET Standard.NET Standard netstandard1.0netstandard1.0
netstandard1.1netstandard1.1
netstandard1.2netstandard1.2
netstandard1.3netstandard1.3
netstandard1.4netstandard1.4
netstandard1.5netstandard1.5
netstandard1.6netstandard1.6
netstandard2.0netstandard2.0
netstandard2.1netstandard2.1
.NET Framework.NET Framework net11net11
net20net20
net35net35
net40net40
net403net403
net45net45
net451net451
net452net452
net46net46
net461net461
net462net462
net47net47
net471net471
net472net472
net48net48
Windows ストアWindows Store netcore [netcore45]netcore [netcore45]
netcore45 [win] [win8]netcore45 [win] [win8]
netcore451 [win81]netcore451 [win81]
.NET Micro Framework.NET Micro Framework netmfnetmf
SilverlightSilverlight sl4sl4
sl5sl5
Windows PhoneWindows Phone wp [wp7]wp [wp7]
wp7wp7
wp75wp75
wp8wp8
wp81wp81
wpa81wpa81
ユニバーサル Windows プラットフォームUniversal Windows Platform uap [uap10.0]uap [uap10.0]
uap10.0 [win10] [netcore50]uap10.0 [win10] [netcore50]

* .NET 5 以降の TFM にはオペレーティング システム固有のバリエーションがいくつか含まれています。* .NET 5 and later TFMs include some operating system-specific variations. 詳細については、次のセクション「.NET 5+ OS 固有の TFM」を参照してください。For more information, see the following section, .NET 5+ OS-specific TFMs.

.NET 5+ OS 固有の TFM.NET 5+ OS-specific TFMs

net5.0net6.0 の TFM には、さまざまなプラットフォームで機能するテクノロジが含まれています。The net5.0 and net6.0 TFMs include technologies that work across different platforms. "OS 固有の TFM" を指定すると、オペレーティング システムに固有の API がアプリで使用できるようになります (Windows フォームや iOS バインディングなど)。Specifying an OS-specific TFM makes APIs that are specific to an operating system available to your app, for example, Windows Forms or iOS bindings. OS 固有の TFM は、ベース TFM で使用可能なすべての API (net5.0 TFM など) も継承します。OS-specific TFMs also inherit every API available to their base TFM, for example, the net5.0 TFM.

.NET 5 で、net5.0-windows OS 固有の TFM が導入されました。これには、WinForms、WPF、UWP の各 API 用の Windows 固有のバインドが含まれています。.NET 5 introduced the net5.0-windows OS-specific TFM, which includes Windows-specific bindings for WinForms, WPF, and UWP APIs. .NET 6 では、OS 固有の TFM がさらに導入されています。.NET 6 introduces further OS-specific TFMs.

次の表に、.NET 5+ TFM の互換性を示します。The following table shows the compatibility of the .NET 5+ TFMs.

TFMTFM 互換性ありCompatible with
net5.0net5.0 net1..4 (NU1701 警告あり)net1..4 (with NU1701 warning)
netcoreapp1..3.1 (WinForms または WPF が参照されたときに警告)netcoreapp1..3.1 (warning when WinForms or WPF is referenced)
netstandard1..2.1netstandard1..2.1
net5.0-windowsnet5.0-windows netcoreapp1..3.1 (および net5.0 から継承された他のすべてのもの)netcoreapp1..3.1 (plus everything else inherited from net5.0)
net6.0net6.0 (net5.0 の後続バージョン)(subsequent version of net5.0)
net6.0-androidnet6.0-android xamarin.android (および net6.0 から継承された他のすべてのもの)xamarin.android (+everything else inherited from net6.0)
net6.0-iosnet6.0-ios xamarin.ios (および net6.0 から継承された他のすべてのもの)xamarin.ios (+everything else inherited from net6.0)
net6.0-macosnet6.0-macos xamarin.mac (および net6.0 から継承された他のすべてのもの)xamarin.mac (+everything else inherited from net6.0)
net6.0-maccatalystnet6.0-maccatalyst xamarin.ios (および net6.0 から継承された他のすべてのもの)xamarin.ios (+everything else inherited from net6.0)
net6.0-tvosnet6.0-tvos xamarin.tvos (および net6.0 から継承された他のすべてのもの)xamarin.tvos (+everything else inherited from net6.0)
net6.0-windowsnet6.0-windows (net5.0-windows の後続バージョン)(subsequent version of net5.0-windows)

異なるプラットフォーム間でアプリを移植可能にしつつ、OS 固有の API に引き続きアクセスするために、OS 固有の複数の TFM をターゲットにして、#if プリプロセッサ ディレクティブを使用して OS 固有の API 呼び出しに対してプラットフォーム ガードを追加することができます。To make your app portable across different platforms but still have access to OS-specific APIs, you can target multiple OS-specific TFMs and add platform guards around OS-specific API calls using #if preprocessor directives.

推奨されるターゲットSuggested targets

次のガイドラインを使用して、アプリで使用する TFM を決定します。Use these guidelines to determine which TFM to use in your app:

  • 複数のプラットフォームに移植可能なアプリの場合、ベース TFM (net5.0 など) をターゲットにする必要があります。Apps that are portable to multiple platforms should target a base TFM, for example, net5.0. これにはほとんどのライブラリと、ASP.NET Core と Entity Framework も含まれます。This includes most libraries but also ASP.NET Core and Entity Framework.

  • プラットフォーム固有のライブラリの場合、プラットフォーム固有のフレーバーをターゲットにする必要があります。Platform-specific libraries should target platform-specific flavors. たとえば、WinForms プロジェクトと WPF プロジェクトは net5.0-windows または net6.0-windows をターゲットにする必要があります。For example, WinForms and WPF projects should target net5.0-windows or net6.0-windows.

  • クロスプラットフォーム アプリケーション モデル (Xamarin Forms、ASP.NET Core) とブリッジ パック (Xamarin Essentials) の場合、少なくともベース TFM (net6.0 など) をターゲットにする必要がありますが、さらに多くの API または機能を利用するために、プラットフォーム固有の追加のフレーバーをターゲットとすることもできます。Cross-platform application models (Xamarin Forms, ASP.NET Core) and bridge packs (Xamarin Essentials) should at least target the base TFM, for example, net6.0, but might also target additional platform-specific flavors to light-up more APIs or features.

TFM 内の OS バージョンOS version in TFMs

TFM の最後に OS バージョンをオプションで指定することもできます。たとえば、アプリで使用できる API を示す net6.0-ios13.0 などですYou can also specify an optional OS version at the end of the TFM, for example, net6.0-ios13.0, which indicates what APIs are available to your app. (対応する .NET SDK は、新しい OS バージョンがリリースされた時点でサポート対象として含めるように更新されます)。新しくリリースされた API にアクセスするには、TFM 内で OS のバージョンを増分します。(The corresponding .NET SDK will be updated to include support for newer OS versions as they are released.) To gain access to newly released APIs, increment the OS version in the TFM. この場合でも、プロジェクト ファイルに SupportedOSPlatformVersion 要素を追加すると、アプリと以前のバージョンの OS との互換性を維持することができます (およびそれ以降のバージョンの API に対する呼び出しに対する保護を追加することができます)。You can still make your app compatible with earlier OS versions (and add guards around calls to later-version APIs) by adding the SupportedOSPlatformVersion element to your project file. SupportedOSPlatformVersion 要素は、アプリを実行するために必要な最小 OS バージョンを示すためのものです。The SupportedOSPlatformVersion element indicates the minimum OS version required to run your app.

たとえば、次のプロジェクト ファイルの抜粋では、iOS 14 API をアプリで使用できるように指定されていますが、iOS 13 以降のマシンで実行可能です。For example, the following project file excerpt specifies that iOS 14 APIs are available to the app, but it can run on iOS 13 or later machines.

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net6.0-ios14.0</TargetFramework>
    <SupportedOSPlatformVersion>13.0</SupportedOSPlatformVersion> (minimum os platform version)
  </PropertyGroup>

  ...

</Project>

ターゲット フレームワークを指定する方法How to specify a target framework

ターゲット フレームワークはプロジェクト ファイルで指定します。Target frameworks are specified in a project file. 単一のターゲット フレームワークを指定するときは、TargetFramework 要素を使用します。When a single target framework is specified, use the TargetFramework element. 次のコンソール アプリのプロジェクト ファイルでは、.NET 5.0 をターゲットにする方法が示されています。The following console app project file demonstrates how to target .NET 5.0:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>

</Project>

複数のターゲット フレームワークを指定するときは、各ターゲット フレームワークに対するアセンブリを条件付きで参照できます。When you specify multiple target frameworks, you may conditionally reference assemblies for each target framework. コードでは、プリプロセッサ シンボルと if-then-else ロジックを使うことで、これらのアセンブリに対して条件付きでコンパイルできます。In your code, you can conditionally compile against those assemblies by using preprocessor symbols with if-then-else logic.

次のライブラリ プロジェクトでは、.NET Standard (netstandard1.4) と .NET Framework (net40 および net45) の API がターゲットにされています。The following library project targets APIs of .NET Standard (netstandard1.4) and .NET Framework (net40 and net45). ターゲット フレームワークが複数あるときは、複数形の TargetFrameworks 要素を使用します。Use the plural TargetFrameworks element with multiple target frameworks. ライブラリが 2 つの .NET Framework TFM に対してコンパイルされる場合、Condition 属性には実装固有のパッケージが含まれます。The Condition attributes include implementation-specific packages when the library is compiled for the two .NET Framework TFMs:

<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>

ライブラリまたはアプリ内で、プリプロセッサ ディレクティブを使用して各ターゲット フレームワーク用にコンパイルするための条件付きコードを記述します。Within your library or app, you write conditional code using preprocessor directives to compile for each target framework:

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
    }
}

SDK スタイル プロジェクトを使用する場合、ビルド システムは、「サポートされるターゲット フレームワークのバージョン」の表で示されているターゲット フレームワークを表すプリプロセッサ シンボルを認識します。The build system is aware of preprocessor symbols representing the target frameworks shown in the Supported target framework versions table when you're using SDK-style projects. .NET Standard、.NET Core、または NET 5 の TFM を表すシンボルを使うときは、ドットとハイフンをアンダースコアに置き換え、小文字を大文字に変更します (たとえば、netstandard1.4 のシンボルは NETSTANDARD1_4 です)。When using a symbol that represents a .NET Standard, .NET Core, or .NET 5 TFM, replace dots and hyphens with an underscore and change lowercase letters to uppercase (for example, the symbol for netstandard1.4 is NETSTANDARD1_4).

.NET ターゲット フレームワークのプリプロセッサ シンボルの完全な一覧を次に示します。The complete list of preprocessor symbols for .NET target frameworks is:

ターゲット フレームワークTarget Frameworks SymbolsSymbols
.NET Framework.NET Framework NETFRAMEWORK, NET48, NET472, NET471, NET47, NET462, NET461, NET46, NET452, NET451, NET45, NET40, NET35, NET20NETFRAMEWORK, NET48, NET472, NET471, NET47, NET462, NET461, NET46, NET452, NET451, NET45, NET40, NET35, NET20
.NET Standard.NET Standard NETSTANDARD, NETSTANDARD2_1, NETSTANDARD2_0, NETSTANDARD1_6, NETSTANDARD1_5, NETSTANDARD1_4, NETSTANDARD1_3, NETSTANDARD1_2, NETSTANDARD1_1, NETSTANDARD1_0NETSTANDARD, NETSTANDARD2_1, NETSTANDARD2_0, NETSTANDARD1_6, NETSTANDARD1_5, NETSTANDARD1_4, NETSTANDARD1_3, NETSTANDARD1_2, NETSTANDARD1_1, NETSTANDARD1_0
.NET 5 (および .NET Core).NET 5 (and .NET Core) NET, NET5_0, NETCOREAPP, NETCOREAPP3_1, NETCOREAPP3_0, NETCOREAPP2_2, NETCOREAPP2_1, NETCOREAPP2_0, NETCOREAPP1_1, NETCOREAPP1_0NET, NET5_0, NETCOREAPP, NETCOREAPP3_1, NETCOREAPP3_0, NETCOREAPP2_2, NETCOREAPP2_1, NETCOREAPP2_0, NETCOREAPP1_1, NETCOREAPP1_0

非推奨のターゲット フレームワークDeprecated target frameworks

次のターゲット フレームワークは非推奨とされます。The following target frameworks are deprecated. これらのターゲット フレームワークをターゲットにするパッケージは、指定されている代替のものに移行する必要があります。Packages that target these target frameworks should migrate to the indicated replacements.

非推奨の TFMDeprecated TFM ReplacementReplacement
aspnet50aspnet50
aspnetcore50aspnetcore50
dnxcore50dnxcore50
dnxdnx
dnx45dnx45
dnx451dnx451
dnx452dnx452
netcoreappnetcoreapp
dotnetdotnet
dotnet50dotnet50
dotnet51dotnet51
dotnet52dotnet52
dotnet53dotnet53
dotnet54dotnet54
dotnet55dotnet55
dotnet56dotnet56
netstandardnetstandard
netcore50netcore50 uap10.0uap10.0
winwin netcore45netcore45
win8win8 netcore45netcore45
win81win81 netcore451netcore451
win10win10 uap10.0uap10.0
winrtwinrt netcore45netcore45

参照See also