闲聊 .NET Standard

image

前言

有时候,我们从 Nuget 下载第三方包时,会看到这些包的依赖除了要求 .NET FrameWork、.NET Core 等的版本之外,还会要求 .NET Standard 的版本,比如这样:

image

这个神秘的 .NET Standard 是什么呢?

.NET Standard 的诞生

在 .NET 的大家庭中有 .NET Framework、.NET Core、Xamarin 等具体的实现,在这些实现中,有一些其他实现所不具有的特性。

比如,.NET Framework 中有访问 Windows 注册表的类,很显然这是其他实现所不具备的;再如,Xamarin 中有拨打电话的类,很显然这也是其他实现所不具备的。

但是这些实现也有一些可以共享的类,比如读写文件的类、List 集合类、字符串类等。如果每个 .NET 实现中,这些可以共享的类都有自己的一套做法,可能就会造成一些问题,比如:

  1. 有可能出现同样功能的类在不同的实现中各不相同的情况,比如在 .NET Framework 中操作文件的类叫 FileStream,但是到了 .NET Core 中对应的类叫 Storage,这样如果我们想开发一个读写文件的代码库供 .NET Framework、.NET Core 等使用,代码编写起来就很麻烦了。

  2. 由于不同的实现中方法名不一致,我们需要花费更多的时间来理解和修改代码,代码会变得难以维护。

  3. 代码可读性就变得更差,代码阅读和理解起来变得很困难。

如果能够这些可以共享的类制定一个规范,无论是 .NET Framework、.NET Core 还是 Xamarin 都要遵守这个规范。比如这个规范规定操作文件的类必须叫 FileStream,而且 FileStream 类必须要有 Read、Write、Flush 等方法,参数和返回值也必须统一,这样编写通用库的时候就会简单很多了。这个 “各个实现通用的基础库规范” 就叫作.NET Standard。

所以,.NET Standard 是一个规范,规定了一系列需要被所有 .NET Core、.NET Framework 及 Xamarin 等共同实现的 API,包括有哪些类、有哪些方法、参数和返回值是什么等。

.NET Standard 和 .NET Core、.NET Framework 对应关系

注意,.NET Standard 只是规定了需要被实现的规范,但是不负责具体实现,对于在 .NET Standard 中规定的类、方法,.NET Core、.NET Framework 及 Xamarin 等必须实现,因此 .NET Standard 相当于定义了 .NET Core、.NET Framework、Xamarin的交集,只要是 .NET Standard 类库,都可以被 .NET Core、.NET Framework、Xamarin 等项目引用。

.NET Standard 随着 .NET 技术的升级而升级,不同版本的 .NET Core、.NET Framework 等支持不同版本的 .NET Standard,越高版本的 .NET Core、.NET Framework 等支持的 .NET Standard 版本越高。

以下是 .NET Standard 和 .NET Core、.NET Framework 对应关系:

  1. .NET Standard 1.0:.NET Core 1.0,.NET Framework 4.5
  2. .NET Standard 1.1:.NET Core 1.0,.NET Framework 4.5
  3. .NET Standard 1.2:.NET Core 1.0,.NET Framework 4.5.1
  4. .NET Standard 1.3:.NET Core 1.0,.NET Framework 4.6
  5. .NET Standard 1.4:.NET Core 1.0,.NET Framework 4.6.1
  6. .NET Standard 1.5:.NET Core 1.0,.NET Framework 4.6.1
  7. .NET Standard 1.6:.NET Core 1.0,.NET Framework 4.6.1
  8. .NET Standard 2.0:.NET Core 2.0,.NET Framework 4.6.1
  9. .NET Standard 2.1:.NET Core 3.0

我们可以开发自己的 .NET Standard 类库吗?

可以。

如果我们要编写一个给公众使用的类库,为了让 .NET Core、.NET Framework 等开发人员都能使用这个类库,那么我们就可以创建自己的 .NET Standard 类库项目。

开发 .NET Standard 类库有个小技巧就是先把项目的 .NET Standard 版本选到最低,如果发现开发时用到的类在这个 .NET Standard 版本中不存在,再逐步在项目属性的 “目标框架” 中提升项目的 .NET Standard 版本,这样有助于提高这个类库的可用范围,因为 .NET Standard 的版本低一些,低版本的 .NET Core、.NET Framework 的项目也能使用这个类库。

最后

.NET Standard 的版本只到 2.1,从 .NET 5 开始,微软不再更新 .NET Standard,而是会把 .NET x 等视为单一的代码库,通过编译期和运行时的检查来解决不同平台下它们所支持的功能具有差异这一问题。

我是老杨,一个奋斗在一线的资深研发老鸟,让我们一起聊聊技术,聊聊程序人生,共同学习,共同进步

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

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

相关文章

从零开始搭建spring boot多模块项目

一、搭建父级模块 1、打开idea,选择file–new–project 2、选择Spring Initializr,选择相关java版本,点击“Next” 3、填写父级模块信息 选择/填写group、artifact、type、language、packaging(后面需要修改)、java version(后面需要修改成和第2步中版本一致)。点击“…

工业触摸一体机优化MES应用开发流程

工业触摸一体机在现代工业生产中扮演着至关重要的角色,它集成了智能触摸屏和工业计算机的功能,广泛应用于各种生产场景中。而制造执行系统(MES)作为工业生产管理的重要工具,对于提高生产效率、降低成本、优化资源利用具…

力扣hot100-普通数组

文章目录 题目:最大子数组和方法1 动态规划方法2 题目:合并区间题解 题目:最大子数组和 原题链接:最大子数组和 方法1 动态规划 public class T53 {//动态规划public static int maxSubArray(int[] nums) {if (nums.length 0…

C++基础知识-编译相关

记录C语言相关的基础知识 1 C源码到可执行文件的四个阶段 预处理(.i)、编译(.s)、汇编(.obj)、链接。 1.1 预处理 预处理阶段,主要完成宏替换、文件展开、注释删除、条件编译展开、添加行号和文件名标识,输出.i/.ii预处理文件。 宏替换,…

【UML用户指南】-26-对高级行为建模-状态图

目录 1、概念 2、组成结构 3、一般用法 4、常用建模技术 4.1、对反应型对象建模 一个状态图显示了一个状态机。在为对象的生命期建模中 活动图展示的是跨过不同的对象从活动到活动的控制流 状态图展示的是单个对象内从状态到状态的控制流。 在UML中,用状态图…

tcpdump命令详解及使用实例

1、抓所有网卡数据包,保存到指定路径 tcpdump -i any -w /oemdata/123.pcap&一、tcpdump简介 tcpdump可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来去掉无用的信…

【Python】已解决:SyntaxError: positional argument follows keyword argument

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决:SyntaxError: positional argument follows keyword argument 一、分析问题背景 在Python编程中,当我们在调用函数时混合使用位置参数(p…

RabbitMQ进阶篇

文章目录 发送者的可靠性生产者重试机制实现生产者确认 MQ的可靠性数据持久化交换机持久化队列持久化消息持久化 Lazy Queue(可配置~)控制台配置Lazy模式代码配置Lazy模式更新已有队列为lazy模式 消费者的可靠性消费者确认机制失败重试机制失败处理策略 业务幂等性唯一消息ID业…

西部智慧健身小程序+华为运动健康服务

1、 应用介绍 西部智慧健身小程序为用户提供一站式全流程科学健身综合服务。用户通过登录微信小程序,可享用健康筛查、运动风险评估、体质检测评估、运动处方推送、个人运动数据监控与评估等公益服务。 2、 体验介绍西部智慧健身小程序华为运动健康服务核心体验如…

idea xml ctrl+/ 注释格式不对齐

处理前 处理后 解决办法 取消这两个勾选

核方法总结(三)———核主成分(kernel PCA)学习笔记

一、核主成分 1.1 和PCA的区别 PCA (主成分分析)对应一个线性高斯模型(参考书的第二章),其基本假设是数据由一个符合正态分布的隐变量通过一个线性映射得到,因此可很好描述符合高斯分布的数据。然而在很多实…

ViewBinding的使用(因为kotlin-android-extensions插件的淘汰)

书籍: 《第一行代码 Android》第三版 开发环境: Android Studio Jellyfish | 2023.3.1 问题: 3.2.4在Activity中使用Toast章节中使用到了kotlin-android-extensions插件,但是该插件已经淘汰,根据网上了解,目前使用了新的技术VewBinding替…

UE4_材质_材质节点_DepthFade

一、DepthFade参数 DepthFade(深度消退)表达式用来隐藏半透明对象与不透明对象相交时出现的不美观接缝。 项目说明属性消退距离(Fade Distance)这是应该发生消退的全局空间距离。未连接 FadeDistance(FadeDistance&a…

光照老化试验箱:材料耐久性的“时间加速器”

光照老化试验箱:材料耐久性的“时间加速器”概述 光照老化试验箱是一种模拟自然光照条件下材料老化过程的设备,广泛应用于材料科学领域的耐久性能评估。通过模拟日光中的紫外线、热辐射等环境因素,加速材料老化过程,以此来验证材…

redhawk:tech file与lefdef layer name不匹配问题

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 一些工艺厂商给的redhawk tech file是加密的,读完tech file再读lef/def会报错,根本不知道问题在哪,他们一般会搭配给一个layer map&#xff…

分解+降维+预测!多重创新!直接写核心!EMD-KPCA-Transformer多变量时间序列光伏功率预测

分解降维预测!多重创新!直接写核心!EMD-KPCA-Transformer多变量时间序列光伏功率预测 目录 分解降维预测!多重创新!直接写核心!EMD-KPCA-Transformer多变量时间序列光伏功率预测效果一览基本介绍程序设计参…

【简单讲解神经网络训练中batch的作用】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

STM32第十五课:LCD屏幕及应用

文章目录 需求一、LCD显示屏二、全屏图片三、数据显示1.显示欢迎词2.显示温湿度3.显示当前时间 四、需求实现代码 需求 1.在LCD屏上显示一张全屏图片。 2.在LCD屏上显示当前时间,温度,湿度。 一、LCD显示屏 液晶显示器,简称 LCD(Liquid Cry…

【Windows】Visual Studio Installer下载缓慢解决办法

【Windows】Visual Studio Installer下载缓慢解决办法 1.背景2.分析3.结果 1.背景 使用visual studio在线安装包进行IDE安装,发现下载几乎停滞,网速几乎为零。 经过排查并不是因为实际网络带宽导致。 这里涉及DNS知识; DNS(Dom…

消防认证-防火卷帘

一、消防认证 消防认证是指消防产品符合国家相关技术要求和标准,且通过了国家认证认可监督管理委员会审批,获得消防认证资质的认证机构颁发的证书,消防产品具有完好的防火功能,是住房和城乡建设领域验收的重要指标。 二、认证依据…