作为了解历史和演进过程,我们需要将 .Net Framwork 、.Net、 .Net Stander几个概念进行下理解。
.net 代表跨平台框架,从.net 5开始就统一叫.net,废弃原来的.net core 叫法。由于太多名字防止混淆,我们就不管.net core了。

.NET Framework

在未来.NET Framework或许成为过去时,目前还是有很多地方在使用的。这一套体系对于做C#的老coder应该是再熟悉不过了,新入坑的也就用不着费力去学习。

.NET Framework 是一种技术,支持生成和运行 Windows 应用及 Web 服务。
.NET Framework 包括公共语言运行时 (CLR) 和 .NET Framework 类库。 公共语言运行时是 .NET Framework 的基础。
可将运行时看作一个在执行时管理代码的代理,它提供内存管理、线程管理和远程处理等核心服务,并且还强制实施严格的类型安全以及可提高安全性和可靠性的其他形式的代码准确性。

.Net

.net 就是由.net core 演进而来,在底层有很多性能和架构优化改造,上层应用api和用法和.NET Framework大多数相同。

.NET 是一种用于构建多种应用的免费开源开发平台,使用 .NET 时,无论你正在构建哪种类型的应用(web,api、桌面应用…),代码和项目文件看起来都一样。 可以访问每个应用的相同运行时、API 和语言功能。
NET 是开放源代码,使用 MIT 和 Apache 2 许可证。 .NET 是 .NET Foundation 的项目。
Microsoft 支持在 Windows、macOS 和 Linux 上使用 .NET。 它会定期更新以保证安全和质量。
.NET 支持三种编程语言:C#、F#、Visual Basic。

.NET Standard

.NET Standard 是针对多个 .NET 实现推出的一套正式的 .NET API 规范。 推出 .NET Standard 的背后动机是要提高 .NET 生态系统中的一致性。 但是,.NET 5 采用不同的方法来建立一致性,这种新方法在很多情况下都不需要 .NET Standard。

所以.net standard 是 .Net Api 规范,不是实现。其作用是为了提高.net 一致性,只要框架支持就能使用.net standard规范去实现。
但是!.NET 5 采用不同的方法来建立一致性,也就是说.net 5 开始过度到.net 框架如果你只是用于.net 框架的话,但是支持.net standard!(名字有点绕晕啊)
NET Standard并未弃用 对于可由多个 .NET 实现使用的库,仍需要 .NET Standard。比如在 .NET Framework 和 .NET 上都要使用的内库就需要按照.net standard规范,这样两个框架都能用,但是要看.net standard版本支持,下图对照。
在创建类库的时候就可以选择不同的支持框架。

各种 .NET 实现以特定版本的 .NET Standard 为目标。 每个 .NET 实现版本都会公布它所支持的最高 .NET Standard 版本,这种声明意味着它也支持以前的版本。

例子说明

**1、**创建一个.NET Standard 类库,添加一个简单的测试方法。

public class NetStandardTest
{
public static void PrintLocation()
{
//打印FileStream 路径
Console.WriteLine(typeof(FileStream).Assembly.Location);
//打印NetStandardTest 路径
Console.WriteLine(typeof(NetStandardTest).Assembly.Location);
}
}

在这个测试方法里面我们加了两行打印代码。主要是打印FileStream路径,同时我们创建的.NET Standard类库为2.0,因为我们接下来要创建.net framework 的控制台,它不支持2.1。

**2、**创建.net 5,.net framework 4.6.1 控制台程序

创建好两个控制台项目,在主方法里面调用内库方法。

static void Main(string[] args)
{
NetStandardTest.PrintLocation();

Console.ReadKey();

}

解决方案结构如下

**3、**运行分析

从结果看我们看到同一个.NET Standard类库,引用在不同的框架上,调用同一个FileStream的地址是不一样的。
然后我们在.NET Standard类库里面F12定位到FileStream看到程序集如下

三个地址我们并列对比下:

C:\Program Files\dotnet\shared\Microsoft.NETCore.App\5.0.8\System.Private.CoreLib.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll
C:\Users\Administrator.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\netstandard.dll

我们将三个dll 用dnspy反编译下,找到FileStream,随便找一个BeginRead方法看下代码。

  • .net standard

  • .net framework

  • .net 5

从上面三个结果对比可以看到.net standard里面是没有实现的,只是定义了方法,也就是说定义了一种标准,说明我的类里面有哪些东西。
调用的时候再根据我们当前使用的框架去找到对应框架的实现。这就是为什么.net standard能对多框架引用,也是为什么2.1不能被.net framework使用,因为它没有去实现2.1新增的api。
至于为什么我们调用.net standard的dll会被转到对应框架的dll呢,这是利用Type Forwarding方式实现跨程序集类型转移的技术成为“垫片(Shim)”,这是实现程序集跨平台复用的重要手段。
关于这个垫片技术可以看下这篇文章https://www.cnblogs.com/artech/p/how-to-cross-platform-03.html。

自此我们已经基本搞清楚了几个概念和体验它们是如何演进而来,以后也许用不太多.net standard了,等不断升级以后直接就用.net 类库就行,也不用去理解这么多概念和技术,可以理解这些是过渡迭代的产物。

原文链接:https://www.cnblogs.com/SunSpring/p/15047424.html

.Net Framework 、.Net 、 .NET Standard的概念与区别相关推荐

  1. .net 5+ 知新:【2】 .Net Framework 、.Net 、 .NET Standard的概念与区别

    作为了解历史和演进过程,我们需要将 .Net Framwork ..Net. .Net Stander几个概念进行下理解. .net 代表跨平台框架,从.net 5开始就统一叫.net,废弃原来的.n ...

  2. .net framework、.net standard、.net core .net 5/6/7/8 区别

    你会不会core? .net行业到底有多坑,通过面试常见问题,就知道了. 都22年底了,core微软都不维护了,这个问题被人事面试到到还能理解,但被95%的技术官面试到我就有点不淡定了,必须来科普下. ...

  3. .net framework、.net standard、 .net core .net 5/6 区别

    .net framework..net standard. .net core .net 5/6 区别 之前一直使用.net framework框架编写程序,这几年微软的动作有点大,更新迭代的有些快, ...

  4. php行为和事件是什么,Yii Framework框架中事件和行为的区别及应用实例分析

    本文实例讲述了Yii Framework框架中事件和行为的区别及应用.分享给大家供大家参考,具体如下: 个人觉得,在 Yii 里面,最难以明白的就是事件(Event)和行为(behavior)了.这不 ...

  5. 浅析 VO、DTO、DO、PO 的概念、区别和用处!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:cnblogs.com/qixuejia/p/4390086 ...

  6. java写一个外网访问的接口_【JAVA基础】一个案例搞懂类、对象、重载、封装、继承、多态、覆盖、抽象和接口概念及区别(中篇)...

    0 前言 初学JAVA时,总会对一些概念一知半解,相互混淆,不明其设计的用意,如类.对象.重载.封装.继承.多态.覆盖.抽象类.接口概念.为便于理解和巩固,本文将基于一个案例及其变形,展现各个概念的定 ...

  7. map和foreach的区别和应用场景_浅析项目中常用的 VO、DTO、DO、PO的概念、区别和用处...

    概念: 模型: VO与DTO的区别 VO与DTO的应用 DTO与DO的区别 DTO与DO的应用 DO与PO的区别 DO与PO的应用 本篇文章主要讨论一下我们经常会用到的一些对象:VO.DTO.DO和P ...

  8. 技术帖:砖混、砖木、钢混、板楼、塔楼、框架、框架剪力墙等概念之区别优劣...

    技术帖:砖混.砖木.钢混.板楼.塔楼.框架.框架剪力墙等概念之区别优劣 http://bbs.fdc.com.cn/showtopic-16331376.aspx天天听KFS说这些词,资料上写这些词, ...

  9. 领域驱动设计:浅析 VO、DTO、DO、PO 概念、区别、用处

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 本篇文章主要讨论一下我们经常会用到的一些对象:VO.DTO.DO和PO. 由于不同的项目和开发人员有 ...

最新文章

  1. RPC框架实践之:Apache Thrift
  2. WCF4.0进阶系列--第四章 保护企业内部的WCF服务(转)
  3. 转:MySQL性能优化的最佳20+条经验
  4. Java项目出现的问题01----学习
  5. 图解JavaScript算法排序
  6. 关于java通过反射 获取/修改 对象属性值的一些注意事项
  7. cplex入门系列(二)--- 线性规划求解
  8. python esp8266 ssd1306_micropython esp8266+ssd1306(OLED) 显示中文(示例)
  9. 我们应该能够识别的表象和本质
  10. python24点4张扑克_Python实现扑克24点 ,从此我就没输过。
  11. 使用科大讯飞SDK实现语音功能
  12. 基于Keras2《面向小数据集构建图像分类模型》——Kaggle猫狗数据集
  13. Linux挂载Windows共享文件夹
  14. JavaScript实现动态添加员工信息
  15. 在群晖 DSM 7.0 系统上如何安装 Plex Media Server
  16. EDID:识别和解决常见问题指南
  17. 苹果xr电池容量_iPhone XR电池容量多大?苹果XR电池续航能力详解
  18. 基于simulink的双闭环矢量控制的电压型PWM整流器仿真
  19. 如何把通达信公式变成python_通达信公式-主力雷达Python化
  20. 如何将n维数组按照其中某个key的值进行升维?

热门文章

  1. 链接:https://pan.baidu.com/s/1joRvLQ7nbti0Wp4t2CkX5w 提取码:ZMTD
  2. Python漫画爬虫开源 66漫画 AJAX,包含数据库连接,图片下载处理
  3. Office 16 Click-to-Run Extensibility Component 卸载
  4. Word中设置不同页面的页眉不一样的方法(页脚、页码同理)
  5. 0x80073712_win10更新失败出现错误代码0x80073712如何解决
  6. 配置Cisco VWIC T1/E1
  7. 软件复用及构件、C/S与B/S混合模型及实战项目技术简述
  8. RK3568的红外遥控
  9. 在鹅厂的第5219天,我毕业了...
  10. 按键精灵使用百度文字识别(百度ocr)教程