.NET Core 和 .NET 标准类库项目类型有什么区别?

news/2024/10/6 23:37:49/文章来源:https://www.cnblogs.com/jishuba/p/18285285

在 Visual Studio 中,至少可以创建三种不同类型的类库:

  • 类库(.NET Framework)
  • 类库(.NET 标准)
  • 类库 (.NET Core)

虽然第一种是我们多年来一直在使用的,但一直感到困惑的一个主要问题是何时使用 .NET Standard 和 .NET Core 类库类型。

那么,类库(.NET Standard)和类库(.NET Core)之间有什么区别,为什么两者都存在,什么时候应该使用其中一个?

类库(.NET Standard)和类库(.NET Core)有什么区别?

.NET Standard 是一个标准(换句话说,是一个规范),主要目的是改善代码共享并使每个 .NET 实现中可用的 API 更加一致。.NET Standard 的基础架构库和共享库,可供 .NET Framework 和 .NET Core 引用。

.NET Framework 用于不支持的技术,例如 Active Report、Window Services(现在支持 .NET 3.0)。

您可以使用 .NET Framework 和 .NET Core 创建可执行项目(如控制台应用程序或 ASP.NET 应用程序),但不能使用 .NET Standard 创建。

使用 .NET Standard,您只能创建一个不能独立执行的类库项目,而应该由另一个 .NET Core 或 .NET Framework 可执行项目引用。

我们什么时候应该使用其中一个?

该决定是兼容性和 API 访问之间的权衡。

当您想要增加与您的库兼容的应用程序数量时,请使用 .NET 标准库,并且您可以接受库可以访问的 .NET API 的减少。

当您想要增加库可以访问的 .NET API 时,请使用 .NET Core 库,并且可以只允许 .NET Core 应用程序与您的库兼容。

例如,以 .NET Standard 1.3 为目标的库将与以 .NET Framework 4.6、.NET Core 1.0、Universal Windows Platform 10.0 和任何其他支持 .NET Standard 1.3 的平台为目标的应用程序兼容。但是,该库将无法访问 .NET API 的某些部分。例如,该 Microsoft.NETCore.CoreCLR包与 .NET Core 兼容,但不与 .NET Standard 兼容。

.NET 标准库将为您提供什么功能(跨框架兼容性)

实现 .NET 标准库允许跨所有这些不同风格共享代码:
image

  1. .NET Standard 通过在您需要的环境中提供您期望和喜爱的所有 API,解决了所有平台上 .NET 开发人员的代码共享问题:桌面应用程序、移动应用程序和游戏以及云服务:
  2. .NET 标准 是所有.NET 平台都必须实现的一组 API。这统一了 .NET 平台并防止了将来的分裂。
  3. .NET Standard 2.0 将由.NET Framework、.NET Core和Xamarin实现。对于.NET Core,这将添加许多已请求的现有 API。
  4. .NET Standard 2.0 包含.NET Framework二进制文件的兼容性垫片,显著增加了您可以从 .NET Standard 库中引用的库集。
  5. .NET 标准 将取代可移植类库 (PCL) 作为构建多平台 .NET 库的工具。

为什么两者都存在?

.NET Standard 存在的原因是为了可移植性;它定义了一组 .NET 平台同意实现的 API。任何实现 .NET 标准的平台都与针对该 .NET 标准的库兼容。这些兼容平台之一就是 .NET Core。

.NET Standard 库模板是为了在多个运行时上运行而存在的(以牺牲 API 覆盖范围为代价)。相反,.NET Core 库模板是为了访问更多的 API 覆盖范围(以牺牲兼容性为代价)并指定构建可执行文件的平台而存在的。

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

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

相关文章

Python数据分析代码示例

数据清洗 在进行数据分析之前,通常需要对原始数据进行清洗,即处理缺失值、异常值、重复值等问题。 下面是一个数据清洗的示例代码: import pandas as pd# 读取原始数据 data = pd.read_csv(data.csv)# 处理缺失值 data = data.dropna()# 处理异常值 data = data[data[value]…

【OpenVINO™】YOLOv10在CPU上也能实现50+FPS推理—使用OpenVINO C++部署YOLOv10

英特尔发行版 OpenVINO™ 工具套件基于 oneAPI 而开发,可以加快高性能计算机视觉和深度学习视觉应用开发速度工具套件,适用于从边缘到云的各种英特尔平台上,帮助用户更快地将更准确的真实世界结果部署到生产系统中。YOLOv10是清华大学研究人员近期提出的一种实时目标检测方法…

插头 DP

插头 DP 定义 基于连通性状态压缩的 DP. 一个方向的插头存在表示这个格子在这个方向可以与外面相连。 状态 一个 \(n \times m(n, m \le 12)\) 的棋盘,有的格子是障碍,问共有多少满足要求的回路? 本题中,所有非障碍格子一定是从一个插头进、一个插头出,刚好用两个插头,方…

笛卡尔树(Cartesian Tree)

笛卡尔树(Cartesian Tree)1. 定义 根据序列构造的满足以下性质的树:二叉搜索树性质(BST):\(key_{ls} \le key_x \le key_{rs}\),\(key\) 默认为下标。 堆性质:\(val_{x} \le val_{ls} \le val_{rs}\).2. 构造如果有 \(key\) 作为第一关键字,则按 \(key\) 升序排序,否…

GreatSQL 中 Insert 慢是什么情况?

GreatSQL中 Insert 慢是什么情况? 背景概述 客户反映,业务上某张表的 Insert 操作速度很慢,单条 Insert 语句的最大执行时间超过了 5 秒。在收到客户问题后,我们仔细检查了数据库状态以及主机的负载情况,发现目前一切正常,并没有发现数据库故障或主机负载过高导致 insert…

技术思考:小米宣布在手机跑通 13 亿参数大模型,这意味着什么?

雷军在 2023 年度演讲中对小米 AI 布局的主要内容总结: 1、AI 赋能软硬件:小米计划通过 AI 技术增强其软件和硬件的能力 ,雷军认为 AI 在小米的技术研发中起着关键作用。 2.、持续布局:自 2016 年 7 月建立 AI 视觉团队以来, 小米一直在 AI 领域有计划地扩展, 今年 4 月还…

Unity使用后Addressables分包查看Build的资源大小

在Unity的Console窗口中,我们可以点击右上角的三个点,然后点击Open Editor Log,查看编辑的日志。 其中会有记录报错的信息,也会有我们build打包之后资源占比信息,上线小游戏的时候我们可以根据这些信息,看看需要压缩哪些资源

【问题解决】GL-MT3000无线中继模式连接想要中继的5GhzWifi失败

找了很久原因,还送厂换了一次货,但是回来之后仍然遇到相同的问题,最终确定应该是信号干扰所致。 尝试降低MT3000的5GHz的Wifi发射功率到中,然后成功连上想要中继的5GhzWifi,并且稳定运行到现在,问题解决。

寻找适合编写静态分析规则的语言

目前静态分析工具的主要痛点:无法开发自定义规则、对误报和漏报的规则无法快速修改,以及开发自定义规则有一定的难度。为了解决这些问题,我们需要寻找适合编写静态分析规则的语言。本文分享自华为云社区《寻找适合编写静态分析规则的语言》,作者:Uncle_Tom。 1. 程序静态分…

使用JAVA调用配方单保存接口更新数据失败, 使用了SaveParam参数

问题原因是SaveParam参数使用错误 传入json只能是model里的单据数据参数, model之外的参数是靠SaveParam的实例去设置, 金蝶的demo里也是很明显的, 如下图

博客的部署方法论

博客写完后,当然是要发布到网络上的。如果想要部署到服务器上,则需编译构建成静态文件,然后将其上传到服务器上的路径(该路径由我们自己决定),然后在 web 服务器(Nginx 等)上配置访问路径即可10.部署 博客写完后,当然是要发布到网络上的。如果想要部署到服务器上,则需…

安全帽佩戴检测系统

安全帽佩戴检测算法是高危作业环境中不可或缺的环节。传统依靠人工监管的方式存在效率低下、管理范围有 限、时效性差、无法全场监测等诸多缺陷,因此基于图像视觉的安全帽佩戴检测算法逐渐成为企业实施管理的主要手段。近年来,随着工业4.0概念的提出和深度学习等 高新技术的发…