TargetFrameworks输出多版本类库,SDK 样式项目中的目标框架

  • A+
所属分类:.NET技术
摘要

https://docs.microsoft.com/zh-cn/dotnet/standard/frameworks#net-5-os-specific-tfmshttps://docs.microsoft.com/zh-cn/dotnet/standard/frameworks#net-5-os-specific-tfms

https://docs.microsoft.com/zh-cn/dotnet/standard/frameworks#net-5-os-specific-tfms

https://docs.microsoft.com/zh-cn/dotnet/standard/frameworks#net-5-os-specific-tfms

 

TargetFrameworks输出多版本类库,SDK 样式项目中的目标框架

 

以应用或库中的框架为目标时,需要指定想要向应用或库提供的 API 集。 使用目标框架名字对象 (TFM) 在项目文件中指定目标框架。

应用或库可以使用 .NET Standard 版本作为目标。 .NET Standard 版本表示所有 .NET 实现中的标准化 API 集。 例如,库可以使用 .NET Standard 1.6 作为目标,并获得对可使用相同基本代码跨 .NET Core 和 .NET Framework 工作的 API 的访问权限。

应用或库还能以一个特定 .NET 实现为目标,获得特定于实现的 API 的访问权限。 例如,面向 Xamarin.iOS 的应用(如 Xamarin.iOS10)有权访问 Xamarin 提供的适用于 iOS 10 的 iOS API 包装器;面向通用 Windows 平台 (UWP) 的应用(如 uap10.0)有权访问为运行 Windows 10 的设备编译的 API。

对于某些目标框架(例如 .NET Framework),API 由框架在系统上安装的程序集定义,并且可能包括应用程序框架 API(例如 ASP.NET)。

对于基于包的目标框架(例如 .NET Standard 和 .NET Core),API 由包含在应用或库中的包定义。 元包 是一个 NuGet 包,NuGet 包本身不包含任何内容,只是一个依赖项列表(其他包)。 基于 NuGet 包的目标框架隐式指定一个元包,该元包引用一起构成框架的所有包。

最新版本

下表定义了最常见的目标框架、如何引用这些框架,以及它们实现的 .NET Standard 版本。 这些目标框架版本是最新的稳定版本。 预览版不会显示。 目标框架名字对象 (TFM) 是一个标准化令牌格式,用于指定 .NET 应用或库的目标框架。

最新版本
目标框架 最新 
稳定版本
目标框架名字对象 (TFM) 已实现 
.NET Standard 版本
.NET Standard 2.1 netstandard2.1 空值
.NET Core 3.1 netcoreapp3.1 2.1
.NET Framework 4.8 net48 2.0

支持的目标框架

目标框架通常由 TFM 引用。 下表显示 .NET SDK 和 NuGet 客户端支持的目标框架。 等效项显示在括号内。 例如,win81 对于 netcore451 来说等效于 TFM。

支持的目标框架
目标 Framework TFM
.NET 5(和 .NET Core) netcoreapp1.0
netcoreapp1.1
netcoreapp2.0
netcoreapp2.1
netcoreapp2.2
netcoreapp3.0
netcoreapp3.1
net5.0*
.NET Standard netstandard1.0
netstandard1.1
netstandard1.2
netstandard1.3
netstandard1.4
netstandard1.5
netstandard1.6
netstandard2.0
netstandard2.1
.NET Framework net11
net20
net35
net40
net403
net45
net451
net452
net46
net461
net462
net47
net471
net472
net48
Windows 应用商店 netcore [netcore45]
netcore45 [win] [win8]
netcore451 [win81]
.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.0 及更高版本的 TFM 包含特定于 OS 的变体。 有关详细信息,请参阅下一节:.NET 5 特定于 OS 的 TFM

.NET 5 特定于 OS 的 TFM

对于每个 .NET 5.0 及更高版本的 TFM(例如 net5.0),都存在包含特定于 OS 的绑定的 TFM 变体。 下表中显示了这些变体。

.NET 5 特定于 OS 的 TFM
特定于 OS 的格式 示例
<base-tfm>-android net5.0-android
<base-tfm>-ios net5.0-ios
<base-tfm>-macos net5.0-macos
<base-tfm>-tvos net5.0-tvos
<base-tfm>-watchos net5.0-watchos
<base-tfm>-windows net5.0-windows

你还可以指定可选的 OS 版本,例如 net5.0-ios12.0

有关 .NET 5 TFM 的详细信息,请参阅 .NET 5 中的目标框架名称

如何指定目标框架

在项目文件中指定目标框架。 指定单个目标框架时,使用 TargetFramework 元素。 以下控制台应用项目文件演示了如何面向 .NET 5.0:

XML
<Project Sdk="Microsoft.NET.Sdk">    <PropertyGroup>     <OutputType>Exe</OutputType>     <TargetFramework>net5.0</TargetFramework>   </PropertyGroup>  </Project> 

指定多个目标框架时,可有条件地为每个目标框架引用程序集。 在代码中,可使用具有 -if-then-else 逻辑的预处理器符号,有条件地针对这些程序集进行编译。

以下库项目面向 .NET Standard (netstandard1.4) 和 .NET Framework(net40 和 net45)的 API。 将复数形式的 TargetFrameworks 元素与多个目标框架一起使用。 为两个 .NET Framework TFM 编译库时,Condition 属性包括特定于实现的包:

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

在库或应用中,使用预处理器指令编写条件代码,针对每个目标框架进行编译:

C#
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 样式项目时,生成系统可识别预处理器符号,这些符号表示支持的目标框架版本表中所示的目标框架。 使用表示 .NET Standard、.NET Core 或 .NET 5 TFM 的符号时,请用下划线替换点和连字符,并将小写字母更改为大写字母(例如,netstandard1.4的符号为 NETSTANDARD1_4)。

.NET 目标框架的预处理器符号的完整列表如下:

表 4
目标框架 符号
.NET Framework NETFRAMEWORKNET48NET472NET471NET47NET462NET461NET46NET452NET451NET45NET40NET35NET20
.NET Standard NETSTANDARDNETSTANDARD2_1NETSTANDARD2_0NETSTANDARD1_6NETSTANDARD1_5NETSTANDARD1_4NETSTANDARD1_3NETSTANDARD1_2NETSTANDARD1_1NETSTANDARD1_0
.NET 5(和 .NET Core) NET5_0NETCOREAPPNETCOREAPP3_1NETCOREAPP3_0NETCOREAPP2_2NETCOREAPP2_1NETCOREAPP2_0NETCOREAPP1_1NETCOREAPP1_0

已弃用的目标框架

以下目标框架已弃用。 面向这些目标框架的包应迁移到指定的替代框架。

 
 
 
已弃用的目标框架
已弃用的 TFM Replacement
aspnet50
aspnetcore50
dnxcore50
dnx
dnx45
dnx451
dnx452
netcoreapp
dotnet
dotnet50
dotnet51
dotnet52
dotnet53
dotnet54
dotnet55
dotnet56
netstandard
netcore50 uap10.0
win netcore45
win8 netcore45
win81 netcore451
win10 uap10.0
winrt netcore45