在 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 标准库允许跨所有这些不同风格共享代码:

  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 覆盖范围(以牺牲兼容性为代价)并指定构建可执行文件的平台而存在的。

.NET Core 和 .NET 标准类库项目类型有什么区别?的更多相关文章

  1. Python 标准类库-日期类型之datetime模块

    标准类库-日期类型之datetime模块    by:授客 QQ:1033553122 可用类型 3 实践出真知 4 timedelta对象 4 class datetime.timedelta(da ...

  2. ASP.NET Core实现类库项目读取配置文件

    前言 之前继续在学习多线程方面的知识,忽然这两天看到博问中有个园友问到如何在.net core类库中读取配置文件,当时一下蒙了,这个提的多好,我居然不知道,于是这两天了解了相关内容才有此篇博客的出现, ...

  3. .NET Core 3.0或3.1 类库项目中引用 Microsoft.AspNetCore.App

    本文为原创文章.首发:http://www.zyiz.net/ 在 ASP.NET Core 3.0+ web 项目中已经不需要在 .csproj 中添加对 Microsoft.AspNetCore. ...

  4. asp.net core 2.0类库项目读取配置文件

    1.首先在类库项目中添加 这3个库. 2.在类库项目中添加AppSetting.cs.代码如下: using Microsoft.Extensions.Configuration;using Syst ...

  5. Asp.Net Core 轻松学系列-3项目目录和文件作用介绍

    目录 前言 结语 前言     上一章介绍了 Asp.Net Core 的前世今生,并创建了一个控制台项目编译并运行成功,本章的内容介绍 .NETCore 的各种常用命令.Asp.Net Core M ...

  6. .Net Core新建解决方案,添加项目引用,使用VSCode调试

    并不是我自己琢磨的,是看了别人学习的,因为写的都不完整,所以就整理一下记录后面忘了回看. 反正.Net Core是跨平台的,就不说在什么系统上了.假设我要建一个名为Doggie的解决方案,里面包含了一 ...

  7. IHostingEnvironment VS IHostEnvironment - .NET Core 3.0中的废弃类型

    原文: https://andrewlock.net/ihostingenvironment-vs-ihost-environment-obsolete-types-in-net-core-3/ 作者 ...

  8. 在 VS 类库项目中 Add Service References 和 Add Web References 的区别

    原文:在 VS 类库项目中 Add Service References 和 Add Web References 的区别 出身问题: 1.在vs2005时代,Add Web Reference(添加 ...

  9. WinForm加载外部类库项目的集成开发模式

    在项目开发中有一定的团队用到了Nuget.Coding:但是这用起来还是不太方方便,在Winform中呢,我们可以把一个人的项目当作一个类库项目,因为它生成的是一个dll文件,也就是单一文件,拥有了它 ...

  10. Python 标准类库 - 因特网协议与支持之socketserver

    标准类库 - 因特网协议与支持之socketserver by:授客 QQ:1033553122 socketserver 模块,简化网络服务编写任务. 创建服务的步骤 1  通过子类化BaseReq ...

随机推荐

  1. 牛客题解 | 单组_A+B

    题目 题目链接 解题思路 输入两个数字,输出它们的和. 代码 #include <iostream> using namespace std; int main(void) { ios:: ...

  2. 【Unity】投影矩阵和线性深度推导

    [Unity]投影矩阵和线性深度推导 网络上有很多投影矩阵的推导,也有很多声称是基于 Unity 的,但和我的实测都不一致(现在看来是因为这些文章并不全面),此外有一些 Unity 本身的函数我也搞不 ...

  3. Linux用户登录失败锁定策略

    1.账户锁定策略介绍 在Linux系统中,为了提高系统安全性,防止暴力破解攻击,我们可以通过配置PAM(Pluggable Authentication Modules)模块来限制登录失败次数并锁定用 ...

  4. JAVA实现AES加密、解密

    一.什么是AES? 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),是一种区块加密标准.这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用. ...

  5. Vulkan环境配置 | vscode+msvc 解决方案

    Vulkan环境配置 | vscode+msvc 解决方案 前言 如果作为Windows 11侠的你是一个vscode爱好者,凑巧电脑上还安装有Visual Studio,这个时候你突然想配置一个Vu ...

  6. 基于项目的协同过滤推荐算法(Item-Based Collaborative Filtering Recommendation Algorithms)

    前言 协同过滤推荐系统,包括基于用户的.基于项目的息肉通过率等,今天我们读一篇基于项目的协同过滤算法的论文. 今天读的论文为一篇名叫<基于项目的协同过滤推荐算法>(Item-Based C ...

  7. word 批量制作ppt

    将 Word 文档作为大纲,构建演示文稿 在 Word 文档中,单击"开始". 使用"样式"设置 Word 文档中内容的格式. 突出显示要用作幻灯片标题的内容, ...

  8. Vue2/Vue3 项目生产环境开启 vue devtools 插件线上调试 vue 组件

    说到 vue 项目的调试工具,必然少不了 "vue devtools 插件",此插件就像"手术刀"一样,是开发环境下的一个利器,生产环境一般情况没办法使用. 要 ...

  9. Paimon merge into 实现原理

    语法 MERGE INTO target USING source ON source.a = target.a WHEN MATCHED THEN UPDATE SET a = source.a, ...

  10. idea 导入普通的项目后,无法发布

    之前一直都是在eclipse开发,现在改idea,但是很多隐藏的功能,都不晓得在哪里找到. 问题: 新导入一个spring 项目(没有maven),在界面上看是没有问题,但是使用tomcat部署项目的 ...