现在各种 .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.0 1.1 1.2 1.3 1.4 1.5 1.6 2.0
.NET 核心.NET Core 1.01.0 1.01.0 1.01.0 1.01.0 1.01.0 1.01.0 1.01.0 2.02.0
.NET Framework 1.NET Framework 1 4.54.5 4.54.5 4.5.14.5.1 4.64.6 4.6.14.6.1 4.6.14.6.1 4.6.14.6.1 4.6.14.6.1
MonoMono 4.64.6 4.64.6 4.64.6 4.64.6 4.64.6 4.64.6 4.64.6 5.45.4
Xamarin.iOSXamarin.iOS 10.010.0 10.010.0 10.010.0 10.010.0 10.010.0 10.010.0 10.010.0 10.1410.14
Xamarin.MacXamarin.Mac 3.03.0 3.03.0 3.03.0 3.03.0 3.03.0 3.03.0 3.03.0 3.83.8
Xamarin.AndroidXamarin.Android 7.07.0 7.07.0 7.07.0 7.07.0 7.07.0 7.07.0 7.07.0 8.08.0
通用 Windows 平台Universal Windows Platform 10.010.0 10.010.0 10.010.0 10.010.0 10.010.0 10.0.1629910.0.16299 10.0.1629910.0.16299 10.0.1629910.0.16299
WindowsWindows 8.08.0 8.08.0 8.18.1
Windows PhoneWindows Phone 8.18.1 8.18.1 8.18.1
Windows Phone SilverlightWindows Phone Silverlight 8.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 应用

一图胜千言

相关文章:

  • 通俗易懂,什么是.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

一文搞清到底什么是 .NET?相关推荐

  1. shell不允许输入空字符_Linux Cygwin知识库(一):一文搞清控制台、终端、shell概念...

    本文共6100余字,预计阅读时间16分钟,本文知乎连接:Linux Cygwin知识库(一):一文搞清控制台.终端.shell概念,本文同步发布于微信公众号(伪码人). 关注账号学习了解更多Cygwi ...

  2. 网文作者御用写作软件| Effie:网文签约到底难不难?

    网文作者,签约是第一道坎. 各大网文写作平台都有各种各样的签约机制,签约的人相对于未签约的人来说,相对属于较少的那一部分. 所以,网文签约到底难不难呢? 这个问题,就好比找工作,找工作的过程可能艰难无 ...

  3. 产品需求文档到底该怎么写?【转】

    (转自:https://blog.csdn.net/wendy356115510/article/details/51404468) 博主作为一名产品小白,也被产品需求文档折腾的死去活来,网上也难找一 ...

  4. 一文解释到底什么是“APP热更新技术”?

    首先,热更新技术作为一种App软件开发者常用的更新方式,简而言之就是用户在下载安装APP之后,会有APP的即时更新. 自从2017年苹果App Store针对热更新的下架事件发生之后,诸多开发者也在不 ...

  5. 一文搞清电子认证相关概念:CA、证书、PKI、CSR、SSL、TSL、CRT、CER、PEM、RSA等

    文章目录 电子认证 公钥基础设施(PKI) 安全认证机构CA 证书 SSL TSL CSR是什么 SSL证书格式 SSL证书文件 OpenSSL证书操作 1.查看 2.转换 3.组合 4.提取 RSA ...

  6. 一文搞清各种来源的wmts服务加载,告别ctrl+c,v

    温馨提示:觉得码字太多,看不下去的,可以直接从后往前看. 一.WMTS服务加载方式 第一种是根据request=getcapabilitites的方式读取xml文件来加载文件中包含的服务.根据需要再进 ...

  7. 相见恨晚!一文搞清XGBoost算法

    XGBoost算法 1,算法简介 XGBoost(Extreme Gradient Boosting),即一种高效的梯度提升决策树算法.他在原有的GBDT基础上进行了改进,使得模型效果得到大大提升.作 ...

  8. Petshop3.0学习笔记(二)Global.asax文档分析

    Global.asax文档和asp中的Global.asa文件的功能是一样的,都是用来宿主Application对象的事件的处理处理程序,然asp.net中的这个文件在内容上却和asp中的差别巨大,不 ...

  9. 一条推文卖出 290 万美元天价?网友:我竟是隐藏的富翁

    ‍‍ 作者 | Carol 出品 | CSDN(ID:CSDNnews) 近日,Twitter联合创始人&CEO杰克·多西(Jack Dorsey)以290万美元的价格出售了他的第一条推文. ...

最新文章

  1. 100道 Dubbo面试题及答案(2021最新)
  2. C++ Primer 5th笔记(chap 18 大型程序工具)使用命名空间成员
  3. python实现模逆运算
  4. solr从pdf、office文档中建立索引
  5. Mac下安装MySQL 5.7.28并且修改root密码
  6. Liferay 中Minifier Filter的minifyCss 奥秘窥探
  7. struts2框架单文件、多文件上传实例详解
  8. solidity教程(三)高级 Solidity 理论
  9. 【181214】VC++动画翻页效果的电话簿程序源代码
  10. 在AD中设置漫游配置文件与文件夹重定向
  11. armbian 斐讯n1_尝试使用斐讯N1在armbian终端下播放音乐
  12. 《Dead Cells》,通过3D工具制作2D动画
  13. Educode--机器学习基础模型与算法测试闯关实验
  14. 一文彻底读懂三极管的工作原理,最通俗的解释,看完就明白了!
  15. Windows + Ubuntu20.04双系统详细安装教程
  16. RSA非对称加密和解密(同时生成密钥)
  17. Linux学习 day05之用户组权限管理
  18. The default interactive shell is now zsh.
  19. 如何将Word文件转化为Latex文件:word-to-latex-2.56详解
  20. 外媒如何看鸿蒙系统实测,鸿蒙系统是否真的很难成功,为何外媒总是在不断的“贬低”它?...

热门文章

  1. python字符串格式化方法 format函数的使用
  2. exchange2013 owa-outlook界面语言
  3. JavaScript图片库
  4. bitmapdata的知识点
  5. UILabel自适应高度和自动换行
  6. cocos2d-x 实现跨平台的目录遍历
  7. AutoCAD VBA基于对象的分层
  8. [转]快速清除SQL Server日志的两种方法
  9. 2021 开源社年度报告:开心开源
  10. .net6给winform带来的新功能