【转】[C#] .net core 项目的目标框架设置
转自:https://learn.microsoft.com/zh-cn/dotnet/standard/frameworks
点图中 目标框架 旁边的问号,在微软官网看到了这个枚举:
支持的目标框架
目标框架通常被简称为 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* |
.NET Standard | netstandard1.0 netstandard1.1 netstandard1.2 netstandard1.3 netstandard1.4 netstandard1.5 netstandard1.6 netstandard2.0 netstandard2.1 |
.NET 框架 | net11 net20 net35 net40 net403 net45 net451 net452 net46 net461 net462 net47 net471 net472 net48 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 |
通用 Windows 平台 | uap [uap10.0] uap10.0 [win10] [netcore50] |
* .NET 5 及更高版本的 TFM 包含一些特定于操作系统的变体。
.NET 5 及更高版本特定于 OS 的 TFM
net5.0
、net6.0
、net7.0
、net8.0
和 net9.0
TFM 包括可以跨不同平台工作的技术。 指定特定于 OS 的 TFM 使特定于操作系统的 API 可供你的应用(例如 Windows 窗体或 iOS 绑定)使用。 特定于操作系统的 TFM 会继承其基础 TFM中的所有可用 API,例如 net9.0
TFM。
.NET 5 引入了 net5.0-windows
特定于 OS 的 TFM,其中包括适用于 WinForms、WPF 和 UWP API 的特定于 Windows 的绑定。 .NET 6 及更高版本具有其他特定于 OS 的 TPM,例如 net6.0-ios
。
下表说明了 .NET 5 及更高版本 TFM 的兼容性。
TFM | 可兼容对象 |
---|---|
net5.0 |
net1..4(带有 NU1701 警告) netcoreapp1..3.1 (引用 WinForms 或 WPF 时出现警告) netstandard1..2.1 |
net5.0-windows |
netcoreapp1..3.1(以及从 net5.0 继承的所有其他内容) |
net6.0 |
(后续版本的 net5.0 ) |
net6.0-android |
xamarin.android (以及从 net6.0 继承的所有其他内容) |
net6.0-ios |
从 net6.0 继承的所有内容 |
net6.0-maccatalyst |
从 net6.0 继承的所有内容 |
net6.0-macos |
从 net6.0 继承的所有内容 |
net6.0-tvos |
从 net6.0 继承的所有内容 |
net6.0-windows |
(后续版本的 net5.0-windows ) |
net7.0 |
(后续版本的 net6.0 ) |
net7.0-android |
(后续版本的 net6.0-android ) |
net7.0-ios |
(后续版本的 net6.0-ios ) |
net7.0-maccatalyst |
(后续版本的 net6.0-maccatalyst ) |
net7.0-macos |
(后续版本的 net6.0-macos ) |
net7.0-tizen |
tizen40 (以及从 net7.0 继承的所有其他内容) |
net7.0-tvos |
(后续版本的 net6.0-tvos ) |
net7.0-windows |
(后续版本的 net6.0-windows ) |
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 ) |
若要使应用可跨不同平台移植,但仍有权访问特定于 OS 的 API,你可以定位多个特定于 OS 的 TFM,并使用 #if
预处理器指令围绕特定于 OS 的 API 调用增加平台防护。 有关可用符号的列表,请参阅预处理器符号。