大家好,关于net网站源码分享很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于net源码下载的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!
作者|WayneCitrin
译者|无明
关键要点
不同平台的.NET开发者已经有了通用的开发工具:VSCode、Mac版VisualStudio和Windows版VisualStudio。
.NETStandard为开发者提供了特定.NET平台的API指南。
.NETCore开发者可以选择macOS、Linux、Windows或三种兼而有之。
.NETCore是开源的,由微软公开开发。
.NETFramework仍然是微软在背后支持,主要面向专门针对Windows平台开发的开发者。
曾几何时,我们只有一个.NET,叫作.NETFramework。如果想要开发.NET应用程序,只要使用.NETFramework即可,非常简单。几年之后,出现了.NET变种的寒武纪大爆发(我们称之为“.NET大爆炸”):.NETFrameworkClientProfile、.NETCompactFramework、.NETMicroFramework、WindowsRuntime、UniversalWindowsPlatform、Mono、Xamarin、.NETCore和.NETStandard。
就像来自寒武纪大爆发的有机体一样,.NET的很多变种最终都已经灭绝:它们不再被支持或不再被更新。有些变种只有一点点的立足之地,被用在非常专业化的领域。还有一些变种(“.NET幸存者”)蓬勃发展,目前正在发展壮大,因为一些特定的原因和用途。本文的目标不是要深入到各种.NET的技术细节中,关于技术细节已经有大量的技术资源可参考。相反,本文的目的是澄清一个简单的问题:在特定情况下应该使用哪种.NET?
.NETFramework
.NETFramework是最初的.NET实现,其他所有.NET都来自它。无论是支持的API数量还是下载量,它都是.NET中最大的一个。多年来,.NETFramework发布了很多版本,每个版本都增加了新的API和功能。.NETFramework由微软开发和支持,并且只能在Windows上运行。
如果你的应用程序只在Windows上运行,那么就应该使用.NETFramework。由于它支持的API数量最多,因此如果选择了.NETFramework,就无需担心是否可以轻松完成一些复杂的任务。不过,如果你希望应用程序从一开始就在Windows以外的平台上运行,或者希望将来在非Windows平台上运行应用程序,那么就要考虑使用不同的.NET类型。
Mono
Mono是.NET的一个开放源代码实现,旨在与.NETFramework兼容,但可以在不同的平台上运行,包括Windows、MacOS和Linux。该项目由爱好者创建,并由MigueldeIcaza领导,他相信.NET的优势也应该被移植到除Windows之外的平台上,而实现这一目标的最佳方式就是开源。Mono的管理权随着deIcaza从一家公司迁移到另一家公司:从Ximian到Novell,再到Xamarin,最后到了微软。
Mono覆盖到的.NETAPI并不完整,但已经很好了。从.NETFramework移植到Mono非常简单,即使是在API覆盖不到位的情况下,也有相对简单的解决方法。
Mono仍然是跨平台.NET的可行之选,尽管微软似乎将大部分跨平台.NET工作转移到了.NETCore中。所以如果你对.NET的未来有所期待,应该要考虑到这一点。此外,Xamarin/微软现在似乎将他们Mono的大部分工作集中在Xamarin平台和支持iOS和Android上,尽管Mono对桌面和服务器平台的支持似乎也很活跃。总之,如果你有一个运行在Windows上的.NETFramework应用程序,并且希望你的应用程序支持Windows、macOS、Linux、BSD等平台,但只想花费很少的精力来转换你的应用程序,那么Mono可能是你最好的选择。
.NETCore
.NETCore是另一个开源的跨平台.NET实现,由微软领衔。它支持Windows、MacOS和Linux。最初,.NETCore是一个轻量级的实现:强大到足以支持ASP.NET和控制台应用程序,但又不会太过。后来,它扩展到可以支持Windows、macOS和Linux上的API子集,但不支持Windows特有的注册表等东西。在这一点上,API的覆盖范围似乎已经进一步扩大了,所以它几乎就像.NETFramework的翻版,尽可能完整地支持多个平台,同时避免支持微软似乎不再需要的API(如.NETRemoting)。像WindowsForms和WPF这样的UIAPI也不受支持(微软已经宣布下一个版本的.NETCore将支持桌面应用程序编程,包括WindowsForms和WPF,但这只适用于Windows上运行应用程序)。
由于.NETCore似乎是跨平台.NET的未来,如果你正在开发在Windows、MacOS或Linux上运行的应用程序,而且不是非Web界面(WindowsForms和WPF不可用),那么我建议使用.NETCore。它可能没有.NETFramework那么多的API,但如果你从头开始开发应用程序,则可以考虑使用这种占用较小空间的API。但是,如果你想让现有的.NETFramework支持跨平台,迁移到.NETCore可能会是一个沉重的负担,因为它可能不支持一些关键API。请注意,微软试图通过Windows兼容包等产品来缓解这种情况,Windows兼容包为.NETCore中的Windows特定API提供支持。但是,如果你使用了这些API,则仍然被锁定在Windows中,至少在.NETCore提供这些API之前是这样的,或者可以通过重写代码移除对它们的依赖。
.NETStandard
.NETStandard是另一个支持跨平台的.NET变种。与.NETFramework、Mono和.NETCore不同,它不是一个包含运行时和库的完整软件包。相反,它是一个API规范,.NET的实现需要基于这一规范——特别是.NETFramework、.NETCore和Xamarin(微软支持的面向iOS、Android和macOS的Mono分支)。目的是让基于.NETStandard实现的库可以在任意.NET平台应用程序中运行。.NETStandard仅支持库,而不是应用程序,所以可以用它开发可在任何地方运行的库。
最新版本的.NETStandard2.0覆盖了更广的API,但仍有大量缺失。它几乎涵盖了.NETCore,但缺失了相当数量的.NETFrameworkAPI。当然,你没有理由非要使用那些缺少的API,但如果你选择了.NETFramework,而不是.NETStandard,那么在移除那些API依赖之前,你会锁定在.NETFramework上。
如果你正在开发一组新库,我会建议你选择.NETStandard。这样,你的库就可以运行在.NETFramework、.NETCore或Xamarin上,而不需要做额外的工作。当然,你一定会创建针对特定.NET变体的应用程序,但如果应用程序足够小,而且包含.NETStandard不支持的GUI类,并且将大部分功能都放在共享库中,那么应该能够最大程度地获得跨平台好处。由于缺乏某些API,迁移现有的.NETFramework代码可能会涉及更多工作,但即使是这样,仍然可以将尽可能多的代码迁移到.NETStandard库,并隔离平台特定代码。在跨平台场景中可能会用到你的.NETStandard库,并且随着时间的推移,你可以花费额外的精力将其余代码迁移到.NETStandard。
关于工具的简要说明
一直以来,每个.NET变体都有自己的专用开发工具。VisualStudio用于.NETFramework开发,MonoDevelop用于Mono开发,VisualStudioCode主要用于.NETCore开发。到了最近,这些界限开始渐渐模糊。除.NETFramework之外,现在可以使用VisualStudio开发Xamarin、.NETCore和.NETStandard。VisualStudioCode最初是一个源代码编辑器,但现在已经成为一个更加完整的开发环境,可用于开发.NETFramework或.NETCore。XamarinStudio(基于MonoDevelop)已被Windows(他们推荐使用VisualStudio)弃用,现在变成VisualStudioforMac,可用于开发Xamarin或.NETCore。因此,除非你正在开发.NETFramework(在这种情况下应该使用VisualStudio),否则可以根据其他需求选择合适的环境。
结论
.NET“大爆炸”产生了很多.NET变体,其中一些已经消亡,其他一些则占据了非常狭小的市场空间,另一些正在蓬勃发展。蓬勃发展的.NET变种之间的相似性足以让开发者感到困惑,并且不确定要使用哪一个,但其实在它们之间做出选择很简单。如果你要创建一个只能在Windows上运行的应用程序,请使用原始的.NETFramework。如果你希望应用程序能够在多个平台上运行,并且需要接近完整的.NETFrameworkAPI,请使用Mono。如果将现有的.NETFramework应用程序迁移到Windows以外的其他平台,Mono也是一个很好的选择。如果你创建的跨平台应用程序可以使用.NETCore提供的不完整API,那么可以考虑.NETCore。最后,可以考虑使用.NETStandard创建可在.NETFramework、.NETCore或Xamarin上运行的库,并在面向特定平台的组件中隔离面向特定平台的部分,例如用户界面。
英文原文
https://www.infoq.com/articles/varieties-dotnet
如果你还想了解更多这方面的信息,记得收藏关注本站。