写点什么

一文看懂.NET 的各种变体

A Guide for the Perplexed

2018 年 6 月 14 日

关键要点

  • 不同平台的.NET 开发者已经有了通用的开发工具:VS Code、Mac 版 Visual Studio 和 Windows 版 Visual Studio。
  • .NET Standard 为开发者提供了特定.NET 平台的 API 指南。
  • .NET Core 开发者可以选择 macOS、Linux、Windows 或三种兼而有之。
  • .NET Core 是开源的,由微软公开开发。
  • .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

2018 年 6 月 14 日 15:581726
用户头像

发布了 731 篇内容, 共 361.0 次阅读, 收获喜欢 1832 次。

关注

评论

发布
暂无评论
发现更多内容

UML练习1-食堂就餐卡系统设计

博古通今小虾米

UML

Spring Cloud 微服务实践(0) - 开篇闲话

xiaoboey

微服务 Spring Cloud Spring Boot Spring Framework

LeetCode题解:622. 设计循环队列,使用数组,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

活着

GongTeng95

算法大赛评委亲授通关秘籍,报名倒计时!

易观大数据

Python基础知识(二)

Python基础

一次压缩引发堆外内存过高的教训

AI乔治

Java kafka JVM

不想搞Java了,4年经验去面试10分钟结束,现在Java面试为何这么难

Java架构师迁哥

直播倒计时|30分钟带你解锁“技术写作”新技能

小红豆

技术 写作 直播 技术创作 RTC征文大赛

一次旅途

GongTeng95

Spring Cloud 微服务实践(1) - 用Initializr初始化

xiaoboey

Spring Cloud Eureka Gateway Hoxton

关于手机里的IP地址,你不得不知道的“秘密”

脑极体

Java 基础语法

InfoQ_34a83d636158

Electronjs

Neil

Java Electron 前端框架 前端教程 客户端开发

网上赌博输了怎么办?上岸戒赌是唯一的选择

geeker

网上赌博输了怎么办 网上赌博玩快三输了怎办 网上玩快三输了怎么回血 网赌输了怎么戒赌

在线游戏,如何把握住1个亿以上的DAU?

BonreeAPM

运维 监控 AIOPS 系统 用户体验

血的教训!千万别在生产使用这些 redis 指令

云流

redis 学习 编程 程序员

字节高级工程师告诉我,想越过开发5年的“分水岭”这样做最适合

周老师

Java 编程 程序员 架构 面试

架构师训练营大作业

叮叮董董

实践案例丨云连接CC实现跨区域多VPC与线下IDC Server互联

华为云开发者社区

云服务 IDC

python——自定义序列类

菜鸟小sailor 🐕

CentOS 7 安装 Python 3.7

wong

Python

如何进步神速

Sean

学习 个人成长

架构师训练营结业作业

superman

数字货币量化交易,量化对冲搬砖系统开发

13530558032

2020年7月云主机性能评测报告

BonreeAPM

云计算 测试 公有云 评测 排行榜

危与机并存 保险业如何走好线上线下业务并举转型之路?

BonreeAPM

运维 监控 保险 AIOPS 系统

Spring Cloud 微服务实践(2) - Gateway重试机制

xiaoboey

maven Spring Cloud Gateway modules 重试

高速路二维码报警定位系统开发,二维码报警定位功能

13530558032

大数据下单集群如何做到2万+规模?

华为云开发者社区

大数据 集群

2020年8月北京BGP机房网络质量评测报告

BonreeAPM

测试 机房 评测 排行榜 IDC

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

一文看懂.NET的各种变体-InfoQ