-
Notifications
You must be signed in to change notification settings - Fork 0
MS_TargetFrameworkVersion
- 戻る(.NETアセンブリ)
何気に、
- 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/netcore451Windows ストア アプリ 廃止 uap10.0UWP 保守 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>ターゲットごとに条件付きコンパイルの定数
(NET48、NETSTANDARD2_0、NET8_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を確認する方法 を参照。
-
.NET Standard
https://learn.microsoft.com/ja-jp/dotnet/standard/net-standard -
ターゲット フレームワーク
https://learn.microsoft.com/ja-jp/dotnet/standard/frameworks -
SDK スタイル プロジェクトでの複数ターゲット
https://learn.microsoft.com/ja-jp/dotnet/standard/library-guidance/cross-platform-targeting
Tags: 移行, .NET開発
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。