\

关键要点

\\

  • 不同平台的.NET开发者已经有了通用的开发工具:VS Code、Mac版Visual Studio和Windows版Visual Studio。\\t
  • .NET Standard为开发者提供了特定.NET平台的API指南。\\t
  • .NET Core开发者可以选择macOS、Linux、Windows或三种兼而有之。\\t
  • .NET Core是开源的,由微软公开开发。\\t
  • .NET Framework仍然是微软在背后支持,主要面向专门针对Windows平台开发的开发者。\

\\

曾几何时,我们只有一个.NET,叫作.NET Framework。如果想要开发.NET应用程序,只要使用.NET Framework即可,非常简单。几年之后,出现了.NET变种的寒武纪大爆发(我们称之为“.NET大爆炸”):.NET Framework Client Profile、.NET Compact Framework、.NET Micro Framework、Windows Runtime、Universal Windows Platform、Mono、Xamarin、.NET Core和.NET Standard。就像来自寒武纪大爆发的有机体一样,.NET的很多变种最终都已经灭绝:它们不再被支持或不再被更新。有些变种只有一点点的立足之地,被用在非常专业化的领域。还有一些变种(“.NET幸存者”)蓬勃发展,目前正在发展壮大,因为一些特定的原因和用途。本文的目标不是要深入到各种.NET的技术细节中,关于技术细节已经有大量的技术资源可参考。相反,本文的目的是澄清一个简单的问题:在特定情况下应该使用哪种.NET?

\\

.NET Framework

\\

.NET Framework是最初的.NET实现,其他所有.NET都来自它。无论是支持的API数量还是下载量,它都是.NET中最大的一个。多年来,.NET Framework发布了很多版本,每个版本都增加了新的API和功能。.NET Framework由微软开发和支持,并且只能在Windows上运行。

\\

如果你的应用程序只在Windows上运行,那么就应该使用.NET Framework。由于它支持的API数量最多,因此如果选择了.NET Framework,就无需担心是否可以轻松完成一些复杂的任务。不过,如果你希望应用程序从一开始就在Windows以外的平台上运行,或者希望将来在非Windows平台上运行应用程序,那么就要考虑使用不同的.NET类型。

\\

Mono

\\

Mono是.NET的一个开放源代码实现,旨在与.NET Framework兼容,但可以在不同的平台上运行,包括Windows、MacOS和Linux。该项目由爱好者创建,并由Miguel de Icaza领导,他相信.NET的优势也应该被移植到除Windows之外的平台上,而实现这一目标的最佳方式就是开源。Mono的管理权随着de Icaza从一家公司迁移到另一家公司:从Ximian到Novell,再到Xamarin,最后到了微软。

\\

Mono覆盖到的.NET API并不完整,但已经很好了。从.NET Framework移植到Mono非常简单,即使是在API覆盖不到位的情况下,也有相对简单的解决方法。

\\

Mono仍然是跨平台.NET的可行之选,尽管微软似乎将大部分跨平台.NET工作转移到了.NET Core中。所以如果你对.NET的未来有所期待,应该要考虑到这一点。此外,Xamarin/微软现在似乎将他们Mono的大部分工作集中在Xamarin平台和支持iOS和Android上,尽管Mono对桌面和服务器平台的支持似乎也很活跃。总之,如果你有一个运行在Windows上的.NET Framework应用程序,并且希望你的应用程序支持Windows、macOS、Linux、BSD等平台,但只想花费很少的精力来转换你的应用程序,那么Mono可能是你最好的选择。

\\

.NET Core

\\

.NET Core是另一个开源的跨平台.NET实现,由微软领衔。它支持Windows、MacOS和Linux。最初,.NET Core是一个轻量级的实现:强大到足以支持ASP.NET和控制台应用程序,但又不会太过。后来,它扩展到可以支持Windows、macOS和Linux上的API子集,但不支持Windows特有的注册表等东西。在这一点上,API的覆盖范围似乎已经进一步扩大了,所以它几乎就像.NET Framework的翻版,尽可能完整地支持多个平台,同时避免支持微软似乎不再需要的API(如.NET Remoting)。像Windows Forms和WPF这样的UI API也不受支持(微软已经宣布下一个版本的.NET Core将支持桌面应用程序编程,包括Windows Forms和WPF,但这只适用于Windows上运行应用程序)。

\\

由于.NET Core似乎是跨平台.NET的未来,如果你正在开发在Windows、MacOS或Linux上运行的应用程序,而且不是非Web界面(Windows Forms和WPF不可用),那么我建议使用.NET Core。它可能没有.NET Framework那么多的API,但如果你从头开始开发应用程序,则可以考虑使用这种占用较小空间的API。但是,如果你想让现有的.NET Framework支持跨平台,迁移到.NET Core可能会是一个沉重的负担,因为它可能不支持一些关键API。请注意,微软试图通过Windows兼容包等产品来缓解这种情况,Windows兼容包为.NET Core中的Windows特定API提供支持。但是,如果你使用了这些API,则仍然被锁定在Windows中,至少在.NET Core提供这些API之前是这样的,或者可以通过重写代码移除对它们的依赖。

\\

.NET Standard

\\

.NET Standard是另一个支持跨平台的.NET变种。与.NET Framework、Mono和.NET Core不同,它不是一个包含运行时和库的完整软件包。相反,它是一个API规范,.NET的实现需要基于这一规范——特别是.NET Framework、.NET Core和Xamarin(微软支持的面向iOS、Android和macOS的Mono分支)。目的是让基于.NET Standard实现的库可以在任意.NET平台应用程序中运行。.NET Standard仅支持库,而不是应用程序,所以可以用它开发可在任何地方运行的库。

\\

最新版本的.NET Standard 2.0覆盖了更广的API,但仍有大量缺失。它几乎涵盖了.NET Core,但缺失了相当数量的.NET Framework API。当然,你没有理由非要使用那些缺少的API,但如果你选择了.NET Framework,而不是.NET Standard,那么在移除那些API依赖之前,你会锁定在.NET Framework上。

\\

如果你正在开发一组新库,我会建议你选择.NET Standard。这样,你的库就可以运行在.NET Framework、.NET Core或Xamarin上,而不需要做额外的工作。当然,你一定会创建针对特定.NET变体的应用程序,但如果应用程序足够小,而且包含.NET Standard不支持的GUI类,并且将大部分功能都放在共享库中,那么应该能够最大程度地获得跨平台好处。由于缺乏某些API,迁移现有的.NET Framework代码可能会涉及更多工作,但即使是这样,仍然可以将尽可能多的代码迁移到.NET Standard库,并隔离平台特定代码。在跨平台场景中可能会用到你的.NET Standard库,并且随着时间的推移,你可以花费额外的精力将其余代码迁移到.NET Standard。

\\

关于工具的简要说明

\\

一直以来,每个.NET变体都有自己的专用开发工具。Visual Studio用于.NET Framework开发,MonoDevelop用于Mono开发,Visual Studio Code主要用于.NET Core开发。到了最近,这些界限开始渐渐模糊。除.NET Framework之外,现在可以使用Visual Studio开发Xamarin、.NET Core和.NET Standard。Visual Studio Code最初是一个源代码编辑器,但现在已经成为一个更加完整的开发环境,可用于开发.NET Framework或.NET Core。Xamarin Studio(基于MonoDevelop)已被Windows(他们推荐使用Visual Studio)弃用,现在变成Visual Studio for Mac,可用于开发Xamarin或.NET Core。因此,除非你正在开发.NET Framework(在这种情况下应该使用Visual Studio),否则可以根据其他需求选择合适的环境。

\\

结论

\\

.NET“大爆炸”产生了很多.NET变体,其中一些已经消亡,其他一些则占据了非常狭小的市场空间,另一些正在蓬勃发展。蓬勃发展的.NET变种之间的相似性足以让开发者感到困惑,并且不确定要使用哪一个,但其实在它们之间做出选择很简单。如果你要创建一个只能在Windows上运行的应用程序,请使用原始的.NET Framework。如果你希望应用程序能够在多个平台上运行,并且需要接近完整的.NET Framework API,请使用Mono。如果将现有的.NET Framework应用程序迁移到Windows以外的其他平台,Mono也是一个很好的选择。如果你创建的跨平台应用程序可以使用.NET Core提供的不完整API,那么可以考虑.NET Core。最后,可以考虑使用.NET Standard创建可在.NET Framework、.NET Core或Xamarin上运行的库,并在面向特定平台的组件中隔离面向特定平台的部分,例如用户界面。

\\

关于作者

\\

Dr. Wayne Citrin 博士是JNBridge有限责任公司的首席技术官兼联合创始人,JNBridge有限责任公司是领先的Java和.NET互操作工具供应商。他是屡获殊荣的桥接技术JNBridgePro和适用于.NET和BizTalk的JMS Adapters架构师,Citrin自.NET推出测试版本以来一直在解决Java和.NET的互操作性问题。Citrin曾担任编程语言和编译器方面的研究员,并在科罗拉多大学博尔德分校担任计算机工程系教授。

\\

查看英文原文:Understanding the Varieties of .NET

一文看懂.NET的各种变体相关推荐

  1. 【目标检测】32、让你一文看懂且看全 NMS 及其变体

    文章目录 一.NMS 1.1 背景 1.2 方法 1.3 代码 1.4 不足 二.Soft NMS 2.1 背景 2.2 方法 2.3 效果 2.4 代码 2.5 不足 三.Softer NMS 3. ...

  2. 一文看懂人脸识别(4个特点+4个实现步骤+5个难点+算法发展轨迹)

    2020-03-09 20:01:00 人脸识别是身份识别的一种方式,目的就是要判断图片和视频中人脸的身份时什么. 本文将详细介绍人脸识别的4个特点.4个步骤.5个难点及算法的发展轨迹. 什么是人脸识 ...

  3. 【深度学习理论】一文看懂卷积神经网络

    [深度学习理论]一文看懂卷积神经网络 https://mp.weixin.qq.com/s/wzpMtMFkVDDH6scVcAdhlA 选自Medium 作者: Pranjal Yadav 经机器之 ...

  4. 一文看懂深度学习——人工智能系列学习笔记

    深度学习有很好的表现,引领了第三次人工智能的浪潮.目前大部分表现优异的应用都用到了深度学习,大红大紫的 AlphaGo 就使用到了深度学习. 本文将详细的给大家介绍深度学习的基本概念.优缺点和主流的几 ...

  5. 判别两棵树是否相等 设计算法_一文看懂生成对抗网络 - GANs?(附:10种典型算法+13种应用)...

    生成对抗网络 – GANs 是最近2年很热门的一种无监督算法,他能生成出非常逼真的照片,图像甚至视频.我们手机里的照片处理软件中就会使用到它. 本文将详细介绍生成对抗网络 – GANs 的设计初衷.基 ...

  6. 无处 不在的无线智能——6g 的关键驱动与研究挑战_一文看懂什么是 6G

    原标题:一文看懂什么是 6G 2020年行将结束,随着5G网络的建设推进,以及3GPP R16版本的冻结,越来越多的人将关注焦点转移到6G身上. 7月14日,韩国三星电子发布了白皮书<下一代超连 ...

  7. 一文看懂推荐系统:概要01:推荐系统的基本概念

    一文看懂推荐系统:概要01:推荐系统的基本概念 提示:最近系统性地学习推荐系统的课程.我们以小红书的场景为例,讲工业界的推荐系统. 我只讲工业界实际有用的技术.说实话,工业界的技术远远领先学术界,在公 ...

  8. 一文看懂开源许可证丨开源知识科普

    一文看懂开源许可证丨开源知识科普 1. 一文看懂开源许可证丨开源知识科普 1.1. 什么是开源许可证? ("Open Source License") 1.2. 常见开源许可证 1 ...

  9. 一文看懂推荐系统:物品冷启05:流量调控

    一文看懂推荐系统:物品冷启05:流量调控 提示:最近系统性地学习推荐系统的课程.我们以小红书的场景为例,讲工业界的推荐系统. 我只讲工业界实际有用的技术.说实话,工业界的技术远远领先学术界,在公开渠道 ...

最新文章

  1. Science:语言可能并不是推理能力所必需的
  2. 好习惯!pandas 8 个常用的 index 设置
  3. 编程基本原则——避免冗余代码
  4. 50道编程小题目之【完全平方数】
  5. python从入门到放弃pdf下载-《Python3从入门到放弃》视频教程
  6. svn: E155007 和 E155004
  7. Linux中sudo的用法和sudoers配置详解
  8. 什么舱位_飞机的舱位究竟是怎么一回事儿
  9. 定制家具设计拆单用什么软件好?
  10. 程序猿最喜欢哪一个浏览器?
  11. [渝粤教育] 四川农业大学 农业气象学 参考 资料
  12. 数字图像处理与分析_第一章
  13. android 自定义通知铃声设置在哪,安卓手机铃声自定义:短信通知、来电铃声怎么设置?...
  14. 远程连接oracle6,win7 64位远程连接oracle11g64位
  15. Caused by: org.activiti.engine.ActivitiException: resource ‘org/activiti/db/create/activiti.dm.creat
  16. 小甲鱼python入门笔记(一)(全)
  17. 环境和社会风险分类c类_企业经营风险的定义、种类以及基本分类
  18. Android camera2扫描
  19. 苹果cms漫画小说模板
  20. html箭头随着点击而移动,点击左右箭头,图片跟随移动,正中的图片始终最大...

热门文章

  1. 第一个小项目 - 去掉指定文件中的注释
  2. NGTabBarController
  3. 错误:mysql foreign key errno 150
  4. 软件产品线工程方法:如何在OpenExpressApp做客户化工作
  5. python的scramy架构_Python库: PrettyTable 模块
  6. Win7 64位系统,PHP 扩展 curl方法
  7. win7 安装Redis
  8. [zz]用U盘装win7/XP系统的操作[图解]
  9. 全国四分之三的光伏电站市场面临较大投资风险
  10. ABP官方文档翻译 0.0 ABP官方文档翻译目录