.NET Standard 支持的 .NET Framework 和 .NET Core

        .NET Standard 是针对多个 .NET 实现推出的一套正式的 .NET API 规范。 推出 .NET Standard 的背后动机是要提高 .NET 生态系统中的一致性。 .NET 5 及更高版本采用不同的方法来建立一致性,这种方法在大多数情况下都不需要 .NET Standard。 但如果要在 .NET Framework 和其他任何 .NET 实现(例如 .NET Core)之间共享代码,则库必须面向 .NET Standard 2.0。 不会发布新版本的 .NET Standard,但 .NET 5 和所有后续版本将继续支持 .NET Standard 2.1 及更早版本。

        有关如何在 .NET 5+ 和 .NET Standard 之间选择的信息,请参阅本文后面的 .NET 5+ 和 .NET Standard。

        .NET Standard 版本已对 .NET Standard 进行版本控制。 每个新版本都会添加更多 API。 当库是针对 .NET Standard 的某个版本生成时,它可以在任何实现该版本(或更高版本)的 .NET Standard 的 .NET 实现上运行。

        面向更高版本的 .NET Standard让库能够使用更多 API,但这意味着它只能在较新版本的 .NET 上使用。 面向较低版本会减少可用的 API,但意味着库可以在更多位置运行。

选择 .NET Standard 版本

.NET Standard 1.0 提供 37,118 个可用 API 中的 7,949 个:

有关详细信息,请参阅 .NET Standard 1.0。 有关交互式表的信息,请参阅 .NET Standard 版本。

.NET Standard 1.1 提供 37,118 个可用 API 中的 10,239 个:

有关详细信息,请参阅 .NET Standard 1.1。 有关交互式表的信息,请参阅 .NET Standard 版本。

.NET Standard 1.2 提供 37,118 个可用 API 中的 10,285 个:

有关详细信息,请参阅 .NET Standard 1.2。 有关交互式表的信息,请参阅 .NET Standard 版本。

.NET Standard 1.3 提供 37,118 个可用 API 中的 13,122 个:

有关详细信息,请参阅 .NET Standard 1.3。 有关交互式表的信息,请参阅 .NET Standard 版本。

.NET Standard 1.4 提供 37,118 个可用 API 中的 13,140 个:

 

有关详细信息,请参阅 .NET Standard 1.4。 有关交互式表的信息,请参阅 .NET Standard 版本。

.NET Standard 1.5 提供 37,118 个可用 API 中的 13,355 个:

1、 针对 .NET framework 列出的版本适用于 .NET Core 2.0 SDK 和更高版本的工具。 旧版本对 .NET Standard 1.5 及更高版本使用了不同映射。 如果无法升级到 Visual Studio 2017 或更高版本,可下载适用于 Visual Studio 2015 的 .NET Core 工具。

2、此处所列的版本表示 NuGet 用于确定给定 .NET Standard 库是否适用的规则。 虽然 NuGet 将 .NET Framework 4.6.1 视为支持 .NET Standard 1.5 到 2.0,但使用为从 .NET Framework 4.6.1 项目构建的 .NET Standard 库存在一系列问题。 对于需要使用此类库的 .NET Framework 项目,建议将项目升级到面向 .NET Framework 4.7.2 或更高版本。

有关详细信息,请参阅 .NET Standard 1.5。 有关交互式表的信息,请参阅 .NET Standard 版本。

.NET Standard 1.6 提供 37,118 个可用 API 中的 13,501 个:

1、针对 .NET framework 列出的版本适用于 .NET Core 2.0 SDK 和更高版本的工具。 旧版本对 .NET Standard 1.5 及更高版本使用了不同映射。 如果无法升级到 Visual Studio 2017 或更高版本,可下载适用于 Visual Studio 2015 的 .NET Core 工具。

2、此处所列的版本表示 NuGet 用于确定给定 .NET Standard 库是否适用的规则。 虽然 NuGet 将 .NET Framework 4.6.1 视为支持 .NET Standard 1.5 到 2.0,但使用为从 .NET Framework 4.6.1 项目构建的 .NET Standard 库存在一系列问题。 对于需要使用此类库的 .NET Framework 项目,建议将项目升级到面向 .NET Framework 4.7.2 或更高版本。

有关详细信息,请参阅 .NET Standard 1.6。 有关交互式表的信息,请参阅 .NET Standard 版本。

.NET Standard 2.0 提供 37,118 个可用 API 中的 32,638 个:

1、针对 .NET framework 列出的版本适用于 .NET Core 2.0 SDK 和更高版本的工具。 旧版本对 .NET Standard 1.5 及更高版本使用了不同映射。 如果无法升级到 Visual Studio 2017 或更高版本,可下载适用于 Visual Studio 2015 的 .NET Core 工具。

2、此处所列的版本表示 NuGet 用于确定给定 .NET Standard 库是否适用的规则。 虽然 NuGet 将 .NET Framework 4.6.1 视为支持 .NET Standard 1.5 到 2.0,但使用为从 .NET Framework 4.6.1 项目构建的 .NET Standard 库存在一系列问题。 对于需要使用此类库的 .NET Framework 项目,建议将项目升级到面向 .NET Framework 4.7.2 或更高版本。

有关详细信息,请参阅 .NET Standard 2.0。 有关交互式表的信息,请参阅 .NET Standard 版本。

.NET Standard 2.1 提供 37,118 个可用 API 中的 37,118 个:

1、针对 .NET framework 列出的版本适用于 .NET Core 2.0 SDK 和更高版本的工具。 旧版本对 .NET Standard 1.5 及更高版本使用了不同映射。 如果无法升级到 Visual Studio 2017 或更高版本,可下载适用于 Visual Studio 2015 的 .NET Core 工具。

2、.NET Framework 不支持 .NET Standard 2.1。 有关详细信息,请参阅 .NET Standard 2.1 公告。

3、UWP 不支持 .NET Standard 2.1。

有关详细信息,请参阅 .NET Standard 2.1。 有关交互式表的信息,请参阅 .NET Standard 版本。

要定位哪个 .NET Standard 版本

建议定位 .NET Standard 2.0,除非你需要支持早期版本。 最常规用途的库应该不需要除 .NET Standard 2.0 之外的其他 API。 所有新式平台都支持 .NET Standard 2.0,并且它是支持具有一个目标的多个平台的推荐方法。

如果需要定位 .NET Standard 1.x,建议还定位 .NET Standard 2.0。 .NET Standard 1.x 作为一组精细的 NuGet 包分发,它创建了一个大型的包依赖项关系图,并导致开发人员在构建时下载大量的包。 有关详细信息,请参阅本文后续部分的跨平台定位和 .NET 5+ 和 .NET Standard。

.NET Standard 版本控制规则

版本控制规则主要有两个:

  • 累加性:.NET Standard 版本在逻辑上形成同心圆。也就是说,较高的版本包含较低版本的所有 API。 版本之间没有重大更改。
  • 不可变:一旦发布,.NET Standard 版本就会冻结起来。

在 .NET Standard 2.1 版本之后,将不会有新版本。 有关详细信息,请参阅本文后续部分的 .NET 5+ 和 .NET Standard。

规范

.NET Standard 规范是一组标准化的 API。 此规范由 .NET 实现者(具体而言,由 Microsoft(包括 .NET Framework、NET Core 和 Mono)和 Unity)进行维护。

正式项目

正式规范是一组用于定义标准中包含的 API 的 .cs 文件。 (现已存档的)dotnet/standard 存储库中的 Ref 目录定义了 .NET Standard API。

NETStandard.Library 元包(源代码)描述用于部分定义一个或多个 .NET Standard 版本的库集。

给定的组件(如 System.Runtime)描述:

  • .NET Standard 的一部分(即其范围)。
  • .NET Standard 在此范围内的多个版本。

标准库提供派生项目以方便读取,并实现某些开发人员方案(例如,使用编译器)。

  • Markdown 中的 API 列表。
  • 引用程序集,以 NuGet 包的形式分发,由 NETStandard.Library 元包引用。

包表示形式

.NET Standard 引用程序集的主要分发载体是 NuGet 包。 实现会以适用于每个 .NET 实现的各种方式提供。

NuGet 包面向一个或多个框架。 .NET Standard 包面向“.NET Standard”框架。 可以使用 netstandard精简 TFM(例如 netstandard1.4)来设定 .NET Standard 框架作为目标。 计划在多个 .NET 实现上运行的库应将此框架作为目标。 对于最广泛的 API 集,将 netstandard2.0 设定为目标,因为 .NET Standard 2.0 的可用 API 数量比 .NET Standard 1.6 的两倍还多。

NETStandard.Library 元包引用定义 .NET Standard 的一整套 NuGet 包。 要指定 netstandard 作为目标,最常见的方法是引用此元包。 它描述并提供了对大约 40 个 .NET 库及定义 .Net Standard 的相关 API 的访问权限。 可以引用以 netstandard 为目标的其他包来使用其他 API。

版本管理

规范并不是单一的,而是一组以线性方式进行版本控制的 API。 该标准的第一个版本建立了一组基准 API。 后续版本将添加 API,并继承以前的版本定义的 API。 在从 Standard 中移除 API 方面,并没有成文的规定。

.NET Standard 并不特定于任何一种 .NET 实现,也不与其中任一实现的版本控制方案匹配。

如前所述,在 .NET Standard 2.1 版本之后,将不会有新版本。

定位 .NET Standard

可以结合使用 netstandard 框架和 NETStandard.Library 元包来构建 .NET Standard 库。

.NET Framework 兼容性模式

从 .NET Standard 2.0 开始,引入了 .NET Framework 兼容性模式。 此兼容性模式允许 .NET Standard 项目引用 .NET Framework 库,就像其针对 .NET Standard 编译一样。 引用 .NET Framework 库并不适用于所有项目,,例如使用 Windows Presentation Foundation (WPF) API 的库。

有关详细信息,请参阅 .NET Framework兼容性模式。

.NET Standard 库和 Visual Studio

要在 Visual Studio 中生成 .NET Standard 库,请确保 Windows 上已安装 Visual Studio 2022、Visual Studio 2019 或 Visual Studio 2017 版本 15.3 或更高版本,或 macOS 上已安装 Visual Studio for Mac 版本 7.1 或更高版本。

如果项目中只需使用 .NET Standard 2.0 库,也可在 Visual Studio 2015 中执行此操作。 但是需要安装 NuGet client 3.6 或更高版本。 可从 NuGet 下载页面下载适用于 Visual Studio 2015 的 NuGet 客户端。

.NET 5+ 和 .NET Standard

.NET 5、.NET 6、.NET 7 和 .NET 8 是具有一组统一功能和 API 的单一产品,可用于 Windows 桌面应用和跨平台控制台应用、云服务和网站。 例如,.NET 8 TFMs 反映了以下广泛的应用场景:

  • net8.0

    此 TFM 适用于在任何位置运行的代码。 它仅包括跨平台工作的技术(少数例外情况除外)。 对于 .NET 8 代码,net8.0 替换了 netcoreapp 和 netstandard TFM。

  • net8.0-windows

    这是一个特定于 OS 的 TFM 的示例,该 TFM 可向 net8.0 引用的所有内容添加特定于 OS 的功能。

以 net8.0 为目标与以 netstandard 为目标的情形

对于以 netstandard 为目标的现有代码,无需将 TFM 更改为 net8.0 或更高版本的 TFM。 .NET 8 可实现 .NET Standard 2.1 及更早版本。 将目标从 .NET Standard 更改为 .NET 8+ 的唯一原因是获取对更多运行时功能、语言功能或 API 的访问权限。 例如,为了使用 C# 9,需要以 .NET 5 或更高版本为目标。 可同时以 .NET 8 和 .NET Standard 为目标来访问较新的功能,并仍然可将库供其他 .NET 实现使用。

下面是适用于 .NET 5+ 新代码的一些准则:

  • 应用组件

    如果你使用库将应用程序分解为多个组件,我们建议以 net8.0 为目标。 为简单起见,最好在同一 .NET 版本中保留构成应用程序的所有项目。 然后,可以假设任何位置均具有相同的 BCL 功能。

  • 可重用的库

    如果要构建计划在 NuGet 上发布的可重用的库,请考虑在覆盖范围和可用功能集之间进行权衡。 .NET Standard 2.0 是 .NET Framework 支持的最新版本,因此它具有相当大的功能集,可提供良好的覆盖范围。 我们建议你不要以 .NET Standard 1.x 作为目标,因为这样会限制可用的功能集,使覆盖范围的增幅降至最低。

    如果你不需要支持 .NET Framework,可以选择 .NET Standard 2.1 或 .NET 8。 我们建议你跳过 .NET Standard 2.1,而直接选择 .NET 8。 大多数广泛使用的库都将同时面向 .NET Standard 2.0 和 .NET 5+。 支持 .NET Standard 2.0 可提供最大的覆盖范围,而支持 .NET 5+ 可确保你可以为已使用 .NET 5+ 的客户利用最新的平台功能。

.NET Standard 的问题

下面是一些关于 .NET Standard 的问题,这些问题有助于解释为什么最好使用 .NET 5 及更高版本来跨平台和工作负载共享代码:

  • 添加新 API 的速度缓慢

    .NET Standard 是作为所有 .NET 实现都必须支持的 API 集创建的,因此会对添加新 API 的建议进行审核。 目标是仅标准化可在所有当前和未来的 .NET 平台中实现的 API。 因此,如果某个功能错过了特定版本,则你可能需要等待几年,该功能才会被添加到 Standard 版本中。 然后,你需要等待更长的时间,新版本的 .NET Standard 才能受到广泛支持。

    .NET 5+ 中的解决方案:实现某项功能时,该功能便已可供所有 .NET 5+ 应用和库使用,因为代码基底是共享的。 由于 API 规范与其实现之间没有区别,因此相较于使用 .NET Standard,你可以更快地利用新功能。

  • 复杂的版本控制

    API 规范与其实现的分离导致 API 规范版本与实现版本之间出现复杂的映射。 这种复杂性在本文前面显示的表以及其解释方式说明中显而易见。

    .NET 5+ 中的解决方案:.NET 5+ API 规范与其实现之间不存在任何分离。 由此实现了一个简化的 TFM 方案。 提供了一个适用于所有工作负载的 TFM 前缀:net8.0 用于库、控制台应用和 Web 应用。 唯一的变化是针对特定平台指定特定于平台的 API 的后缀,例如 net8.0-windows。 由于此 TFM 命名约定,你可以轻松判断给定应用是否可以使用给定的库。 不需要版本号等效表(如 .NET Standard 的版本号等效表)。

  • 运行时出现不受平台支持的异常

    .NET Standard 公开了特定于平台的 API。 代码在编译时可能不会出错,并且看起来可以移植到任何平台(即该代码不可移植也是如此)。 当它在不具有给定 API 实现的平台上运行时,会出现运行时错误。

    .NET 5+ 中的解决方案:.NET 5+ SDK 包括默认启用的代码分析器。 平台兼容性分析器会检测对你打算在其上运行的平台所不支持的 API 的意外使用情况。 有关详细信息,请参阅平台兼容性分析器。

未弃用 .NET Standard

对于可由多个 .NET 实现使用的库,仍需要 .NET Standard。 在以下情况下,建议以 .NET Standard 作为目标:

  • 使用 netstandard2.0 在 .NET Framework 和 .NET 的所有其他实现之间共享代码。
  • 使用 netstandard2.1 在 Mono、Xamarin 和 .NET Core 3.x 之间共享代码。

另请参阅

  • .NET Standard 版本(源)
  • .NET Standard 版本(交互式 UI)
  • 生成 .NET Standard 库
  • 跨平台定位

更多请参考官网地址:.NET Standard - .NET | Microsoft Learn 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/231662.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SAP设置修改删除自动JOB

一、设置JOB 方法一 一个不需要单独记事务码的方式 如果FS要求开发做了程序的话,直接执行事务码,点击左上角 程序-后台执行 输出设备选择LP01 打勾,有可能还有一个对话框,也打勾 打勾后设置周期值 系统预设的会有小时、天、周…

创新性文生视频模型,南洋理工开源FreeInit

文本领域的ChatGPT,画图领域的Midjourney都展现出了大模型强大的一面,虽然视频领域有Gen-2这样的领导者,但现有的视频扩散模型在生成的效果中仍然存在时间一致性不足和不自然的动态效果。 南洋理工大学S实验室的研究人员发现,扩散…

Spring Cloud Gateway + Nacos 灰度发布

前言 本文将会使用 SpringCloud Gateway 网关组件配合 Nacos 实现灰度发布&#xff08;金丝雀发布&#xff09; 环境搭建 创建子模块服务提供者 provider&#xff0c;网关模块 gateway 父项目 pom.xml 配置 <?xml version"1.0" encoding"UTF-8"?…

【Spring实战】22 Spring Actuator 入门

文章目录 1. 定义2. 功能3. 依赖4. 配置5. 常用的应用场景1&#xff09;环境监控2&#xff09;运维管理3&#xff09;性能优化 结论 Spring Actuator 是 Spring 框架的一个模块&#xff0c;为开发人员提供了一套强大的监控和管理功能。本文将深入探讨 Spring Actuator 的定义、…

【HTML5】第1章 HTML5入门

学习目标 了解网页基本概念&#xff0c;能够说出网页的构成以及网页相关名词的含义 熟悉Web标准&#xff0c;能够归纳Web标准的构成。 了解浏览器&#xff0c;能够说出各主流浏览器的特点。 了解HTML5技术&#xff0c;能够知道HTML5发展历程、优势以及浏览器对HTML5的支持情…

【QT】QStandardItemModel类的应用介绍

目录 1 概述 2 常用方法 3 QStandardItemModel的使用 3.1 界面设计与主窗口类定义 3.2 系统初始化 3.3 从文本文件导入数据 3.4 数据修改 3.5 单元格格式设置 3.6 数据另存为文件 1 概述 QStandardItemModel是标准的以项数据&#xff08;itemdata&#xff09;为基础的…

FPGA项目(14)——基于FPGA的数字秒表设计

1.功能设计 设计内容及要求: 1.秒表最大计时范围为99分59. 99秒 2.6位数码管显示&#xff0c;分辨率为0.01秒 3.具有清零、启动计时、暂停及继续计时等功能 4.控制操作按键不超过二个。 2.设计思路 所采用的时钟为50M&#xff0c;先对时钟进行分频&#xff0c;得到100HZ频率…

CSS 放大翻转动画

<template><div class="container" @mouseenter="startAnimation" @mouseleave="stopAnimation"><!-- 旋方块 --><div class="box" :class="{ rotate-scale-up-hor: isAnimating }"><!-- 元素内…

macosx编译qgroundcontrol源码(Qt6.7)

1.克隆源码: clone --recursive http://github.com/mavlink/qgroundcontrol.git 克隆成功 3.编译 编译环境要求: 编译方法: 使用QtCreator编译 使用命令行编译 打开QGroundControl.pro并编译IOS版本 旧版本使用Qt 5.15.2 run qmake 新版本使用Qt 6.6或者更高 IOS工程输出要…

mysql5.7安装-windows安装版本

下载地址 官网地址:https://www.mysql.com/官网下载地址:https://dev.mysql.com/downloads/mysql/阿里云镜像站下载:https://mirrors.aliyun.com/mysql/华为云镜像站地址:https://mirrors.huaweicloud.com/home华为云镜像站下载:https://mirrors.huaweicloud.com/mysql/Downlo…

英飞凌TC3xx之一起认识GTM(九)GTM相关知识简述(CMU,CCM,TBU,MON)

英飞凌TC3xx之一起认识GTM(九)GTM相关知识简述(CMU,CCM,TBU,MON) 1 时钟管理单元(CMU)2 集群配置模块(CCM)3 时基单元(TBU)4 监控单元(MON)5 总结由前文的各篇内容,开发者已经知道如何使用GTM的大部分功能,在这些功能中,都需要一个信息就是fGTM 的数据,我们在前…

技术查漏补缺(1)Logback

一、下定义&#xff1a;Logback是一个开源的日志组件 二、Logback的maven <!--这个依赖直接包含了 logback-core 以及 slf4j-api的依赖--> <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><v…

excel统计分析——两因素无重复方差分析

参考资料&#xff1a;生物统计学 从严格意义上讲&#xff0c;两因素试验都应当设置重复观测值&#xff0c;以便检验交互作用是否真实存在&#xff0c;对试验误差有更准确的估计&#xff0c;从而提高检验效率。但根据专业知识或先前的试验已经证明两个因素不存在交互作用时&…

算法每日一题: 被列覆盖的最多行数 | 二进制 - 状态压缩

大家好&#xff0c;我是星恒 今天的题目又是一道有关二进制的题目&#xff0c;有我们之前做的那道 参加考试的最大学生数的 感觉&#xff0c;哈哈&#xff0c;当然&#xff0c;比那道题简单多了&#xff0c;这道题感觉主要的考点就是二进制&#xff0c;大家可以好好总结一下这道…

JVM加载class文件的原理机制

1、JVM 简介 JVM 是我们Javaer 的最基本功底了&#xff0c;刚开始学Java 的时候&#xff0c;一般都是从“Hello World ”开始的&#xff0c;然后会写个复杂点class &#xff0c;然后再找一些开源框架&#xff0c;比如Spring &#xff0c;Hibernate 等等&#xff0c;再然后就开发…

【数值分析】非线性方程求根,牛顿法,牛顿下山法,matlab实现

4. 牛顿法 收敛时牛顿法的收敛速度是二阶的&#xff0c;不低于二阶。如果函数有重根&#xff0c;牛顿法一般不是二阶收敛的。 x k 1 x k − f ( x k ) f ′ ( x k ) x_{k1}x_k- \frac{f(x_k)}{f(x_k)} xk1​xk​−f′(xk​)f(xk​)​ matlab实现 %% 牛顿迭代例子 f (x) x…

JRTClient打开谷歌

网站默认已经启动https访问&#xff0c;这时候JRTClient发布wss需要浏览器信任证书才能访问打印。为此在JRTClient内部发布了HTTPS服务&#xff0c;有时候浏览器信任的证书会丢失或者被清理掉&#xff0c;这时候需要手工信任下&#xff0c;当然用JRTBrowser就不用信任证书&…

市场复盘总结 20240105

仅用于记录当天的市场情况,用于统计交易策略的适用情况,以便程序回测 短线核心:不参与任何级别的调整,采用龙空龙模式 最常用的二种方法: 方法一:指标选股找强势股 select * from dbo.ResultAll where 入选类型 like %指标选股% and 入选日期=20240105;方法二:趋势选股…

深入理解内存检测工具:一文解析内存检测工具的全貌与使用技巧

C和C是非常不安全且容易出错的编程语言&#xff0c;Address Sanitizer是由Google开发的一种工具&#xff0c;用于检测内存访问错误&#xff0c;如使用后释放&#xff08;use-after-free&#xff09;和内存泄漏。它已集成到GCC版本> 4.8中&#xff0c;可用于C和C代码。Addres…

QT5.14 实现ModbusTCP客户端 Demo

本文在QT5.14平台&#xff0c;基于QModbusClientTcp类&#xff0c;实现了客户端对单个寄存器的读写&#xff0c;用ModbusSlave做服务器做测试。 1.界面 (1)更改读按钮的名称为bt_Read (2)更改写按钮的名称为bt_Write 2.修改pro文件的第三行 greaterThan(QT_MAJOR_VERSION, 4)…