Skip to content

MS_TargetFrameworkVersion

nishi_74322014 edited this page Aug 21, 2026 · 1 revision

ターゲット フレームワークのバージョン

概要

何気に、

  • netcoreapp = .NET Core
  • netcore = Windows Store

なので、注意。

補足(TFM の読み方): 原文が挙げているのは
**TFM(Target Framework Moniker)**の紛らわしい例である。
「netcore」という名前でありながら .NET Core ではない
(Windows 8.x のストア アプリ向け)という罠を指している。

現在使われる TFM は次の通り。

TFM 意味 現況
net8.0 / net10.0 .NET 5 以降(クロスプラットフォーム) 現行
net8.0-windows 上記 + Windows 固有 API(WinForms/WPF) 現行
net8.0-android / -ios / -maccatalyst .NET MAUI 等 現行
netstandard2.0 .NET Framework とも共有するライブラリ 現役(互換の要)
netstandard2.1 .NET Core 3.0+ / Mono 系のみ 用途は限定的
net48 / net472 .NET Framework 4.x 保守
netcoreapp3.1 .NET Core 3.1(旧命名 サポート終了
netcore45 / netcore451 Windows ストア アプリ 廃止
uap10.0 UWP 保守
portable-net45+win8... PCL(可搬クラス ライブラリ) 廃止

命名が変わった経緯が混乱のもとなので整理しておく。

.NET Core 1.0 〜 3.1     →  netcoreapp1.0 … netcoreapp3.1
                             ("app" が付く)
      ↓  .NET 4.x との番号衝突を避けて 4 を飛ばす
.NET 5 以降              →  net5.0, net6.0, net8.0, net10.0
                             (.NET Framework の net45 と同じ書式!)

つまり net4x は .NET Framework、net5.0 以降は .NET
という、桁数と小数点の有無で区別する紛らわしい規則になっている。

表記 指すもの
net48 .NET Framework 4.8(小数点なし・2 桁)
net8.0 .NET 8(小数点あり)

このため、原文の警告と同じ趣旨で、
TFM は「名前の見た目」で判断せず、必ず表で確認するのが安全である。

補足(複数ターゲット): ライブラリでは
.csproj で複数の TFM を指定できる(TargetFrameworks、複数形)。

<PropertyGroup>
  <TargetFrameworks>net48;netstandard2.0;net8.0</TargetFrameworks>
</PropertyGroup>

ターゲットごとに条件付きコンパイルの定数
NET48NETSTANDARD2_0NET8_0_OR_GREATER)が自動で定義されるため、
差分は #if で吸収できる。

#if NET8_0_OR_GREATER
    var span = CollectionsMarshal.AsSpan(list);
#else
    var span = list.ToArray().AsSpan();
#endif

_OR_GREATER 付きの定数を使うのが定石
NET8_0 だけだと .NET 10 でビルドしたときに外れてしまう)。

なお、アセンブリに焼き込まれた TFM を後から確認する方法は
.NETアセンブリのtargetFrameworkを確認する方法 を参照。

参考

Microsoft Learn


Tags: 移行, .NET開発

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally