在 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. 摸鱼日历,新闻简报等一些工作摸鱼日历API接口合集分享

    摸鱼人日历API接口 请求示例(图片输出): https://moyu.qqsuu.cn 请求示例(JSON输出):[推荐] https://moyu.qqsuu.cn/?type=json 调用示例 ...

  2. 【Matlab】输出变量内容到xls文件

    版本: matlab 2017a 功能:将矩阵输出一个excel文件 代码: function [ statu ] = write2xls( x,filename,sheet) % 返回值: % 1 ...

  3. FastAPI 自定义参数验证器完全指南:从基础到高级实战

    title: FastAPI 自定义参数验证器完全指南:从基础到高级实战 date: 2025/3/11 updated: 2025/3/11 author: cmdragon excerpt: 本教 ...

  4. golang gin框架使用swagger生成接口文档

    前言 一份清晰明了的接口文档能够极大地提高前后端双方的沟通效率和开发效率. 本文将介绍如何使用swagger生成接口文档. swagger介绍 Swagger本质上是一种用于描述使用JSON表示的RE ...

  5. MySQL REPLACE函数:字符串替换

    语法 REPLACE ( string_expression , string_pattern , string_replacement ) 替换字符串,接受3个参数,分别是原字符串,被替代字符串,替 ...

  6. docker 版本号说明

    17.03 版本以前 Docker CE 在 17.03 版本之前叫 Docker Engine, 版本说明参考这里 => Docker Engine release notes, 可以看到 D ...

  7. Audio DSP 链接脚本文件解析

    上篇文章(智能手表音乐播放功耗的优化)讲了怎么优化音乐场景下的功耗,其中第二点是优化memory的布局.那么在哪里优化memory的布局呢?就是在本文要讲的链接脚本(ld)文件里.作为audio DS ...

  8. BUUCTF---这是Base??

    题目 dict:{0: 'J', 1: 'K', 2: 'L', 3: 'M', 4: 'N', 5: 'O', 6: 'x', 7: 'y', 8: 'U', 9: 'V', 10: 'z', 11 ...

  9. 【工具篇】git常用命令分享

    1. 配置 1.1 设置全局用户名和邮箱 git config --global user.name xxx git config --global user.email xxx@xxx.com 上述 ...

  10. [每日算法 - 华为机试] leetcode53 :最大子数组和 「算法中的哲学」

    入口 53. 最大子数组和https://leetcode.cn/problems/maximum-subarray/ 题目描述 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数 ...