一文搞清到底什么是 .NET?

现在各种 .NET 满天飞,别说新手了,连我这样的老手都差点被绕进去。到底什么是 .NET 呢?通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core? 这篇文章好长呀,不知道你看完了没有,其实最关键的是核心的几个概念,我们从头梳理一下自然就清楚了。

.NET Framework 时代

远在 2000 年的时候,微软就发布了 .NET 1.0。然后在 2001 年的时候就成为了国际标准。

标准是需要实现的,微软对这个标准的第一个实现就是 .NET Framework,也是多年来我们所熟悉的 .NET。但是,这个 .NET 的实现是基于 Windows 平台的,其中包含了大量基于 Windows 的实现,甚至许多 Windows 专有的内容,比如 GDI 支持等等。微软从前推广的 .NET 跨平台,其实,是在微软平台上的跨平台。由于 .NET Framework 是直接基于 Windows 平台的,所以,.NET Framework 的程序是不能真正跨平台的,比如运行在 Linux 上。

多样化的 .NET 实现

.NET 确实是一个非常优秀的设计,它吸引了大量的开发者,所以,世界上还存在着许多其它的 .NET 实现。他们自己开发了基于 .NET 标准的其它实现,例如,非常著名的 Mono 就是一个由 Xamarin 公司(先前是Novell,最早为Ximian)所主持的自由开放源代码项目。

但是,包括微软自己的 .NET Framework 在内的各种 .NET 实现,看起来都是 .NET,甚至都可以使用 C# 来开发程序,都是面向对象的,其实是各不兼容的,比如它们的底层所支持的 API 就各不相同。这导致的结果就是,你在各个平台上开发的程序集其实是无法通用的。因为对于某个 API 来说,有的平台支持,有的平台就不支持。

虽然开发人员可以通过条件编译等手段来开发可以支持在各种 .NET 实现上通用的类库,显然这是一个艰巨的任务,你必须要清楚各个实现的各个版本到底支持了哪些 API。

你必须掌握的Entity Framework 6.x与Core 2.0

作者:汪鹏

当当 广告
购买

.NET Standard 和 .NET Core

到 2014 年的时候,微软的策略转向了开源和跨平台,.NET Framework 显然无法做到这一点,.NET Core 横空出世,它是开源,完全跨平台的 .NET 实现,也是微软的第二个主要 .NET 实现。现在问题来了,即使对于微软来说,现在都有了两个主要的 .NET 实现了,到底哪个是正宗的 .NET 的呢?

计算机领域有个概念,如果你不能统一它,就增加一个抽象层。微软又搞出一个 .NET Standard 的新概念。

顾名思义,.NET Standard 就是 .NET 的标准,它是一组规范,定义了在 .NET 的实现中到底应该包括哪些 API ,你可以在这里查看这个标准的官方说明。其中的要点如下:

  • 为所有的 .NET 实现定义一组统一的基础类库支持的 API

  • 使得开发人员能够基于这个标准开发可以在各种 .NET 中使用的可移植库

它的好处在于,开发人员不用再逐个平台的检查是否支持某个 API 了,只要看这个平台支持到了 .NET Standard 的哪个版本就行了,只要目标平台支持某个 .NET Standard ,就可以确认你的类库可以跨 .NET 实现通用了。越高的 .NET Standard 版本包含的 API 越多,但通用性越差,因为不是所有的平台都支持这么多的 API,显然,越低的 .NET Standard 兼容性越好,因为它要求的 API 越少,所以,支持的平台也越多。

对于开发人员来说,有了这个 .NET Standard,开发通用的类库自然简单多了。

微软给出了一个各个常见平台各个版本所支持的 .NET Standard 标准的列表。

.NET Standard.1.01.11.21.31.41.51.62.0
.NET 核心.NET Core1.01.01.01.01.01.01.01.01.01.01.01.01.01.02.02.0
.NET Framework 1.NET Framework 14.54.54.54.54.5.14.5.14.64.64.6.14.6.14.6.14.6.14.6.14.6.14.6.14.6.1
MonoMono4.64.64.64.64.64.64.64.64.64.64.64.64.64.65.45.4
Xamarin.iOSXamarin.iOS10.010.010.010.010.010.010.010.010.010.010.010.010.010.010.1410.14
Xamarin.MacXamarin.Mac3.03.03.03.03.03.03.03.03.03.03.03.03.03.03.83.8
Xamarin.AndroidXamarin.Android7.07.07.07.07.07.07.07.07.07.07.07.07.07.08.08.0
通用 Windows 平台Universal Windows Platform10.010.010.010.010.010.010.010.010.010.010.0.1629910.0.1629910.0.1629910.0.1629910.0.1629910.0.16299
WindowsWindows8.08.08.08.08.18.1




Windows PhoneWindows Phone8.18.18.18.18.18.1




Windows Phone SilverlightWindows Phone Silverlight8.08.0






.NET Core 与 .NET Framework 的选择

.NET Framework 和 .NET Core 都是 .NET,只不过它们支持的 API 并不完全一致。开发人员更加头疼了,都是微软的亲儿子,我们应该选哪个呢?

从支持程度来看,微软主要在推广 .NET Core,以支持跨平台应用,对 .NET Framework 的支持倒在其次。
.NET Core 从 2.0 开始追上 .NET Framework 的 API 数量,达到支持 .NET Standard 2.0 水平,更新速度明显快于 .NET Framework。刚刚发布的 .NET Core 2.1 中支持了 Span<T>,这个特性到明年的 .NET Framework 4.8 都不会支持。所以,新应用的开发应该首选 .NET Core。

不过,有一个问题你不得不考虑一下,.NET Core 是跨平台的,必须支持所有平台,因此,它不可能包含 Windows 特定的一些 API,比如注册表的访问,所以。理论上讲,如果你希望在开发中使用一些 Windows 平台专员的 API,它是不会出现在 .NET Core 中的。

别担心,微软在 .NET 2.0 开始,微软提供了 Microsoft.Windows.Compatibility 来解决这个问题,该包提供了额外的约 20000 API 以支持 Windows 平台。可以在 .NET Core 项目中,添加对这个包的引用。
Windows 兼容性包通过 NuGet 包 Microsoft.Windows.Compatibility 提供,可从面向 .NET Core 或 .NET Standard 的项目引用。它提供了约 20,000 个 API 以支持原来在 .NET Framework 中支持,但是在 .NET Standard 中没有的 API。

对于 NuGet 库中的包来说,在发布于 2017/8/14 的 Announcing .NET Core 2.0 中,已经达到了约 70% 的支持度。

总结

  • 对于 .NET 来说,首先要认识到 .NET Standard 是 .NET 的标准,这个标准有自己版本号,目前的版本是 2.0。

  • 在这个 .NET Standard 标准之下,有许多 .NET 的实现,比较著名的就是 .NET Framework 和 .NET Core 了,它们各自有各自的实现版本,目前 .NET Framewrok 是 4.7.2,而 .NET Core 则是 2.1。查看这里的说明。

  • API 最丰富的就是 .NET Framework 了,不过它仅支持 Windwos 平台。

  • .NET Core 的 2.1 版本,加上 Microsoft.Windows.Compatibility 这个包,已经很接近 .NET Framework 的支持水平,NuGet 中的类库也已经绝大多数支持了 .NET Core, 微软还在疯狂的填补这个差距。

  • 如果是新的项目,强烈建议基于 .NET Core 开发

  • 当前使用 Visual Studio 和 Visual Studio Code 都可以开发 .NET Core 应用

一图胜千言

640?wx_fmt=png

相关文章: 

  • 通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?

  • 物联网项目使用 .NET的5个理由

  • .NET Framework 4.8预览

  • [翻译] .NET Core 2.1 发布

原文地址: http://www.cnblogs.com/haogj/p/9265031.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

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

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

相关文章

P4552-[Poetize6]IncDec Sequence【差分】

正题 题目链接:https://www.luogu.com.cn/problem/P4552 题目大意 给出nnn个数&#xff0c;每次可以选择一个区间加一或减一&#xff0c;求最少操作使得所有数相等&#xff0c;并且求可能的最终序列个数。 解题思路 在差分数组上操作&#xff0c;那么操作变为将差分数组上一…

练习利用LSTM实现手写数字分类任务

练习利用LSTM实现手写数字分类任务 MNIST数据集中图片大小为28*28. 按照行进行展开成28维的特征向量。 考虑到这28个的向量之间存在着顺序依赖关系&#xff0c;我们可以将他们看成是一个长为28的输入序列&#xff0c;将其输入到LSTM中&#xff0c;LSTM可以从中提取到序列特征…

【图论】最短路上的统计(ssl 1500)

最短路上的统计 ssl 1500 题目大意&#xff1a; 求一个图中&#xff0c;从a到b的所有最短路所经过的点数之和 原题&#xff1a; 题目描述 一个无向图上&#xff0c;没有自环&#xff0c;所有边的权值均为1&#xff0c;对于一个点对&#xff08;a,b&#xff09;,我们要把所…

Service Mesh新成员:Consul 1.2

本文译自 HashiCorp 官网关于 Consul 1.2 支持 Service Mesh 发布的博客文章。原文链接&#xff1a;https://www.hashicorp.com/blog/consul-1-2-service-mesh作者&#xff1a;Mitchell Hashimoto 翻译&#xff1a;董干 转载自&#xff1a;https://blog.idevfun.io/consul-1-2-…

P4564-[CTSC2018]假面【期望dp】

正题 题目大意:https://www.luogu.com.cn/problem/P4564 题目大意 nnn个人第iii个有mim_imi​点血&#xff0c;每次有操作 有ppp的概率对一个人造成111点伤害&#xff08;如果死了就不算&#xff0c;ppp每次都不同&#xff09;给出若干个人&#xff0c;对里面存活的人随机选择…

VAE(变分自编码器)学习笔记

VAE学习笔记 普通的编码器可以将图像这类信息编码成为特征向量. 但通常这些特征向量不具有空间上的连续性. VAE(变分自编码器)可以将图像信息编码成为具有空间连续性的特征向量. 方法是向编码器和解码器中加入统计信息,即特征向量代表的的是一个高斯分布,强迫特征向量服从高…

小 X 的 AK 计划

小 X 的 AK 计划 题目大意&#xff1a; 有n个点&#xff0c;到一个点&#xff08;时间为距离&#xff09;并花一些时间可以A掉此点&#xff0c;问最多可以A多少个点 原题&#xff1a; 解题思路&#xff1a; 先按位置从小到大排序&#xff0c;然后到每一个点并A掉的时间加在…

.NET Core 2.1的重大缺陷延长了.NET Core 2.0的寿命

微软近日宣布&#xff0c;.NET Core 2.0 即将 "寿终正寝"&#xff0c;对它的支持将在2018年10月1日结束。.NET Core 2.0 是一个非长期支持&#xff08;LTS&#xff09;的版本&#xff0c;因此微软的承诺是在下一个版本发布的三个月之后结束对它的支持。由于 .NET Cor…

P4782-[模板]2-SAT问题【tarjan】

正题 题目链接:https://www.luogu.com.cn/problem/P4782 题目大意 给若干个条件限定为xi为a或xj为bx_i为a或x_j为bxi​为a或xj​为b。求构造一个序列xxx满足所有条件 解题思路 我们对于每个xix_ixi​构造两个点分别表示xix_ixi​为0/10/10/1。然后就开始对能够确定的条件关系…

区间dp专题

区间dp专题 基本思想 区间dp一类的问题往往子问题具有很明显的区间性质,也就是说我们可以通过将子问题定义为整个区间的一个子区间.因为一个大区间可以切分成两段相邻的子区间.从这点出发,我们便可以找到递推关系. 1.纸牌游戏 蜘蛛牌游戏规则是这样的&#xff1a;只能将牌拖…

.Net Core开发日志——Global Tools

.Net Core 2.1引入了一个新的功能&#xff0c;Global Tools&#xff0c;其本质是包含控制台应用程序的nuget包&#xff0c;目前而言&#xff0c;还没有特别有用的工具&#xff0c;不过相信随着时间的推移&#xff0c;各种有创意或者实用性强的Global Tools会出现在大家的视野里…

【DP】回文词 (ssl 1813)

回文词 ssl 1813 题目大意&#xff1a; 给出一个式子&#xff0c;最少要加多少个字符才能让这个式子是一个“回文词” 原题&#xff1a; 题目描述 回文词是一种对称的字符串,也就是说:一个回文词,从左向右读和从右向左读的结果都是一样的.任意给定一个字符串,通过插入若干…

POJ3678-Katu Puzzle【2-SAT】

正题 题目链接:http://poj.org/problem?id3678 题目大意 nnn个xix_ixi​为0/10/10/1。有mmm个条件表示xiandxjax_i\ and\ x_jaxi​ and xj​a或xiorxjax_i\ or\ x_jaxi​ or xj​a或xixorxjax_i\ xor\ x_jaxi​ xor xj​a。 求构造一组合法的xix_ixi​。 解题思路 讨论一下 …

Simple-Faster-RCNN源码学习笔记

Simple-Faster-RCNN 源码学习 项目github地址: https://github.com/chenyuntc/simple-faster-rcnn-pytorch 源码 源文件: model/utils/bbox_tools.py 方法: loc2bbox(src_bbox, loc) 参数含义: src_bbox描述的是bbox的坐标.loc表示的偏移(offsets)和缩放尺度(scales). 给…

API网关模式

什么是网关网关一词来源于计算机网络中的定义&#xff0c;网关(Gateway)又称网间连接器、协议转换器。网关的准确定义是&#xff1a; 两个计算机程序或系统之间的连接&#xff0c;网关作为两个程序之间的门户&#xff0c;允许它们通过不同计算机之间的协议通信来共享信息。顾名…

楼层

楼层 题目大意&#xff1a; 有两个数m和t&#xff0c;问1~m之间去掉有数字t的数之后还有多少个数 原题&#xff1a; 题目描述 mxy 感觉新世界的大门打开了。 ta 决定要在新世界的旅馆中找间房住。已知新世界每天都有一个高能的数字 t&#xff0c;这个数字在楼层中是不会出…

P3825-[NOI2017]游戏【2-SAT】

正题 题目链接:https://www.luogu.com.cn/problem/P3825 题目大意 nnn场比赛&#xff0c;对于场地aaa不能用赛车AAA&#xff08;b,cb,cb,c以此类推&#xff09;&#xff0c;对于场地xxx可以用任何赛车。然后给定mmm条条件形如iIjJi\ I\ j\ Ji I j J表示在第iii场比赛使用赛车I…

CVPR19 基于图卷积网络的多标签图像识别模型 论文笔记

笔记 旷视研究院的研究员提出了如下模型,用于图像的多标签分类. 该模型与一般模型不一样的一点是,它的分类器是生成的,因此它有一个专门生成分类器的子网络. 网络主要由两部分构成 特征表示子网络,该网络由ResNet-101构成,即蓝色框圈出的部分.分类器生成子网络,该网络由3个…

日行千里,全凭“车”况,为什么我们要升级平台

历经一个半月的时间&#xff0c;不管是叫工业互联网平台还是叫工业大数据平台&#xff0c;从1.0版本升级到2.0版本&#xff0c;升级部分包括&#xff1a;客户端&#xff08;网关&#xff09;、服务端&#xff08;数据接收、数据处理、计算服务&#xff09;、底层数据库结构、WE…

朋友

朋友 题目大意&#xff1a; 有两堆数&#xff0c;只有第一堆数会和第二堆数中比自己小的数交“朋友”&#xff0c;问有多少对朋友 原题&#xff1a; 题目描述 mxy 即将前往新世界。 在前往新世界的过程中&#xff0c;ta 遇见了两种人。一种是只和 lowb 做朋友&#xff0c;…