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

摘要:
这个NET标准版代表了一组标准化的API。NET实现。指定的目标框架。NET应用程序或库。

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 Standard2.1netstandard2.1空值
.NET Core3.1netcoreapp3.12.1
.NET Framework4.8net482.0

支持的目标框架

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

支持的目标框架
目标 FrameworkTFM
.NET 5(和 .NET Core)netcoreapp1.0
netcoreapp1.1
netcoreapp2.0
netcoreapp2.1
netcoreapp2.2
netcoreapp3.0
netcoreapp3.1
net5.0*
.NET Standardnetstandard1.0
netstandard1.1
netstandard1.2
netstandard1.3
netstandard1.4
netstandard1.5
netstandard1.6
netstandard2.0
netstandard2.1
.NET Frameworknet11
net20
net35
net40
net403
net45
net451
net452
net46
net461
net462
net47
net471
net472
net48
Windows 应用商店netcore [netcore45]
netcore45 [win] [win8]
netcore451 [win81]
.NET Micro Frameworknetmf
Silverlightsl4
sl5
Windows Phonewp [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>-androidnet5.0-android
<base-tfm>-iosnet5.0-ios
<base-tfm>-macosnet5.0-macos
<base-tfm>-tvosnet5.0-tvos
<base-tfm>-watchosnet5.0-watchos
<base-tfm>-windowsnet5.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 FrameworkNETFRAMEWORKNET48NET472NET471NET47NET462NET461NET46NET452NET451NET45NET40NET35NET20
.NET StandardNETSTANDARDNETSTANDARD2_1NETSTANDARD2_0NETSTANDARD1_6NETSTANDARD1_5NETSTANDARD1_4NETSTANDARD1_3NETSTANDARD1_2NETSTANDARD1_1NETSTANDARD1_0
.NET 5(和 .NET Core)NET5_0NETCOREAPPNETCOREAPP3_1NETCOREAPP3_0NETCOREAPP2_2NETCOREAPP2_1NETCOREAPP2_0NETCOREAPP1_1NETCOREAPP1_0

已弃用的目标框架

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

 
 
 
已弃用的目标框架
已弃用的 TFMReplacement
aspnet50
aspnetcore50
dnxcore50
dnx
dnx45
dnx451
dnx452
netcoreapp
dotnet
dotnet50
dotnet51
dotnet52
dotnet53
dotnet54
dotnet55
dotnet56
netstandard
netcore50uap10.0
winnetcore45
win8netcore45
win81netcore451
win10uap10.0
winrtnetcore45

免责声明:文章转载自《TargetFrameworks输出多版本类库,SDK 样式项目中的目标框架》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇四个有害的Java编码习惯MSF MS12-020RDP漏洞攻击下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

3、YishaAdmin开源框架搭建

框架:vs2019、.net core 3.1 SDK 下载地址:https://github.com/liukuo362573/YiShaAdmin 数据库: 1). MySql >= 5.7 (本项目选择mysql数据库) 2). SqlServer >= Sql Server 2012 3). Oracle >= Oracle DB...

Windows突破远程连接最大数去掉限制登录

当对方设置最大连接数 超过限制时 可以用这个命令 win+r  输入 mstsc /v:192.168.18.131:3389 /console   windows server 2003 sp2 以下的版本(包括) mstsc /v:192.168.18.131:3389 /admin  windows server 2003 sp2 以上的版本(不包括...

macOS 系统更新node老是不成功

 使用网上的方法,更新macOS系统上的node,总是不成功。   每次打开新的终端,node -v 都会显示之前的版本v8.11.4。。咋回事!!!     【方法】:    直接卸载 node(要卸载干净!)         但是通过 终端的命令行也难以卸载干净:MacOS X 10.10卸载Node      试了这个方法也不行:mac安装nod...

.net FrameWork各个版本之间的发展[转]

上个星期看到了.NET 4.0框架退休日期逐渐临近文章,发现自己一直在使用NET  FrameWork,身为一个NET程序员,里面大概的区别自己还是知道的,但是自己要说出个所以然来了,发现还是有点力不从心,当时关于这几个版本之间的有很多,目前很多地方都只是写到了4.5,关于4.5.1,4.5.2这两个版本提及的还是非常少的,相对来说,自己写这篇文章也就没...

MySQL UDF提权 过程及注意事项

MySQL UDF提权 过程及注意事项 0x00 udf = ‘user defined function’,即‘用户自定义函数’。是通过添加新函数,对MYSQL的功能进行扩充,性质就象使用本地MYSQL函数如abs()或concat()。udf在mysql5.1以后的版本中,存在 思路 当获得webshell后发现权限比较低,但是在inc文件中拿到数据库...

python 通过pip freeze、dowload打离线包及自动安装【适用于保密的离线环境】

python的pip是其包管理工具,相当方便好用。本文只介绍pip 如何通过其freeze命令打离线包,及其离线包的安装脚本。这个知识点,特别适用于不适合连通互联网,设备需要物理隔绝,保密要求严格的客户环境。 环境 操作系统: Centos 7.7 python 版本: 2.7 客户网络环境: 离线 研发网络环境:联网 pip 安装 (1)下载rpm包...