乐博娱乐»ASP.NET»一文看懂.NET的各种变体

一文看懂.NET的各种变体

来源:infoq 宣布时间:2018-06-15 阅读次数:乐博

  曾几何时,我们只有一个.NET,叫作.NET Framework。如果想要乐博娱乐开发.NET应用程序,只要使用.NET Framework即可,很是简朴。几年之后,泛起了.NET变种的寒武纪大发作(我们称之为“.NET大爆炸”):.NET Framework Client Profile.NET Compact Framework.NET Micro FrameworkWindows RuntimeUniversal 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