一文看懂.NET的各种变体
關(guān)鍵要點(diǎn)
\\- 不同平臺(tái)的.NET開(kāi)發(fā)者已經(jīng)有了通用的開(kāi)發(fā)工具:VS Code、Mac版Visual Studio和Windows版Visual Studio。\\t
- .NET Standard為開(kāi)發(fā)者提供了特定.NET平臺(tái)的API指南。\\t
- .NET Core開(kāi)發(fā)者可以選擇macOS、Linux、Windows或三種兼而有之。\\t
- .NET Core是開(kāi)源的,由微軟公開(kāi)開(kāi)發(fā)。\\t
- .NET Framework仍然是微軟在背后支持,主要面向?qū)iT(mén)針對(duì)Windows平臺(tái)開(kāi)發(fā)的開(kāi)發(fā)者。\
曾幾何時(shí),我們只有一個(gè).NET,叫作.NET Framework。如果想要開(kāi)發(fā).NET應(yīng)用程序,只要使用.NET Framework即可,非常簡(jiǎn)單。幾年之后,出現(xiàn)了.NET變種的寒武紀(jì)大爆發(fā)(我們稱之為“.NET大爆炸”):.NET Framework Client Profile、.NET Compact Framework、.NET Micro Framework、Windows Runtime、Universal Windows Platform、Mono、Xamarin、.NET Core和.NET Standard。就像來(lái)自寒武紀(jì)大爆發(fā)的有機(jī)體一樣,.NET的很多變種最終都已經(jīng)滅絕:它們不再被支持或不再被更新。有些變種只有一點(diǎn)點(diǎn)的立足之地,被用在非常專業(yè)化的領(lǐng)域。還有一些變種(“.NET幸存者”)蓬勃發(fā)展,目前正在發(fā)展壯大,因?yàn)橐恍┨囟ǖ脑蚝陀猛?。本文的目?biāo)不是要深入到各種.NET的技術(shù)細(xì)節(jié)中,關(guān)于技術(shù)細(xì)節(jié)已經(jīng)有大量的技術(shù)資源可參考。相反,本文的目的是澄清一個(gè)簡(jiǎn)單的問(wèn)題:在特定情況下應(yīng)該使用哪種.NET?
\\.NET Framework
\\.NET Framework是最初的.NET實(shí)現(xiàn),其他所有.NET都來(lái)自它。無(wú)論是支持的API數(shù)量還是下載量,它都是.NET中最大的一個(gè)。多年來(lái),.NET Framework發(fā)布了很多版本,每個(gè)版本都增加了新的API和功能。.NET Framework由微軟開(kāi)發(fā)和支持,并且只能在Windows上運(yùn)行。
\\如果你的應(yīng)用程序只在Windows上運(yùn)行,那么就應(yīng)該使用.NET Framework。由于它支持的API數(shù)量最多,因此如果選擇了.NET Framework,就無(wú)需擔(dān)心是否可以輕松完成一些復(fù)雜的任務(wù)。不過(guò),如果你希望應(yīng)用程序從一開(kāi)始就在Windows以外的平臺(tái)上運(yùn)行,或者希望將來(lái)在非Windows平臺(tái)上運(yùn)行應(yīng)用程序,那么就要考慮使用不同的.NET類型。
\\Mono
\\Mono是.NET的一個(gè)開(kāi)放源代碼實(shí)現(xiàn),旨在與.NET Framework兼容,但可以在不同的平臺(tái)上運(yùn)行,包括Windows、MacOS和Linux。該項(xiàng)目由愛(ài)好者創(chuàng)建,并由Miguel de Icaza領(lǐng)導(dǎo),他相信.NET的優(yōu)勢(shì)也應(yīng)該被移植到除Windows之外的平臺(tái)上,而實(shí)現(xiàn)這一目標(biāo)的最佳方式就是開(kāi)源。Mono的管理權(quán)隨著de Icaza從一家公司遷移到另一家公司:從Ximian到Novell,再到Xamarin,最后到了微軟。
\\Mono覆蓋到的.NET API并不完整,但已經(jīng)很好了。從.NET Framework移植到Mono非常簡(jiǎn)單,即使是在API覆蓋不到位的情況下,也有相對(duì)簡(jiǎn)單的解決方法。
\\Mono仍然是跨平臺(tái).NET的可行之選,盡管微軟似乎將大部分跨平臺(tái).NET工作轉(zhuǎn)移到了.NET Core中。所以如果你對(duì).NET的未來(lái)有所期待,應(yīng)該要考慮到這一點(diǎn)。此外,Xamarin/微軟現(xiàn)在似乎將他們Mono的大部分工作集中在Xamarin平臺(tái)和支持iOS和Android上,盡管Mono對(duì)桌面和服務(wù)器平臺(tái)的支持似乎也很活躍。總之,如果你有一個(gè)運(yùn)行在Windows上的.NET Framework應(yīng)用程序,并且希望你的應(yīng)用程序支持Windows、macOS、Linux、BSD等平臺(tái),但只想花費(fèi)很少的精力來(lái)轉(zhuǎn)換你的應(yīng)用程序,那么Mono可能是你最好的選擇。
\\.NET Core
\\.NET Core是另一個(gè)開(kāi)源的跨平臺(tái).NET實(shí)現(xiàn),由微軟領(lǐng)銜。它支持Windows、MacOS和Linux。最初,.NET Core是一個(gè)輕量級(jí)的實(shí)現(xiàn):強(qiáng)大到足以支持ASP.NET和控制臺(tái)應(yīng)用程序,但又不會(huì)太過(guò)。后來(lái),它擴(kuò)展到可以支持Windows、macOS和Linux上的API子集,但不支持Windows特有的注冊(cè)表等東西。在這一點(diǎn)上,API的覆蓋范圍似乎已經(jīng)進(jìn)一步擴(kuò)大了,所以它幾乎就像.NET Framework的翻版,盡可能完整地支持多個(gè)平臺(tái),同時(shí)避免支持微軟似乎不再需要的API(如.NET Remoting)。像Windows Forms和WPF這樣的UI API也不受支持(微軟已經(jīng)宣布下一個(gè)版本的.NET Core將支持桌面應(yīng)用程序編程,包括Windows Forms和WPF,但這只適用于Windows上運(yùn)行應(yīng)用程序)。
\\由于.NET Core似乎是跨平臺(tái).NET的未來(lái),如果你正在開(kāi)發(fā)在Windows、MacOS或Linux上運(yùn)行的應(yīng)用程序,而且不是非Web界面(Windows Forms和WPF不可用),那么我建議使用.NET Core。它可能沒(méi)有.NET Framework那么多的API,但如果你從頭開(kāi)始開(kāi)發(fā)應(yīng)用程序,則可以考慮使用這種占用較小空間的API。但是,如果你想讓現(xiàn)有的.NET Framework支持跨平臺(tái),遷移到.NET Core可能會(huì)是一個(gè)沉重的負(fù)擔(dān),因?yàn)樗赡懿恢С忠恍╆P(guān)鍵API。請(qǐng)注意,微軟試圖通過(guò)Windows兼容包等產(chǎn)品來(lái)緩解這種情況,Windows兼容包為.NET Core中的Windows特定API提供支持。但是,如果你使用了這些API,則仍然被鎖定在Windows中,至少在.NET Core提供這些API之前是這樣的,或者可以通過(guò)重寫(xiě)代碼移除對(duì)它們的依賴。
\\.NET Standard
\\.NET Standard是另一個(gè)支持跨平臺(tái)的.NET變種。與.NET Framework、Mono和.NET Core不同,它不是一個(gè)包含運(yùn)行時(shí)和庫(kù)的完整軟件包。相反,它是一個(gè)API規(guī)范,.NET的實(shí)現(xiàn)需要基于這一規(guī)范——特別是.NET Framework、.NET Core和Xamarin(微軟支持的面向iOS、Android和macOS的Mono分支)。目的是讓基于.NET Standard實(shí)現(xiàn)的庫(kù)可以在任意.NET平臺(tái)應(yīng)用程序中運(yùn)行。.NET Standard僅支持庫(kù),而不是應(yīng)用程序,所以可以用它開(kāi)發(fā)可在任何地方運(yùn)行的庫(kù)。
\\最新版本的.NET Standard 2.0覆蓋了更廣的API,但仍有大量缺失。它幾乎涵蓋了.NET Core,但缺失了相當(dāng)數(shù)量的.NET Framework API。當(dāng)然,你沒(méi)有理由非要使用那些缺少的API,但如果你選擇了.NET Framework,而不是.NET Standard,那么在移除那些API依賴之前,你會(huì)鎖定在.NET Framework上。
\\如果你正在開(kāi)發(fā)一組新庫(kù),我會(huì)建議你選擇.NET Standard。這樣,你的庫(kù)就可以運(yùn)行在.NET Framework、.NET Core或Xamarin上,而不需要做額外的工作。當(dāng)然,你一定會(huì)創(chuàng)建針對(duì)特定.NET變體的應(yīng)用程序,但如果應(yīng)用程序足夠小,而且包含.NET Standard不支持的GUI類,并且將大部分功能都放在共享庫(kù)中,那么應(yīng)該能夠最大程度地獲得跨平臺(tái)好處。由于缺乏某些API,遷移現(xiàn)有的.NET Framework代碼可能會(huì)涉及更多工作,但即使是這樣,仍然可以將盡可能多的代碼遷移到.NET Standard庫(kù),并隔離平臺(tái)特定代碼。在跨平臺(tái)場(chǎng)景中可能會(huì)用到你的.NET Standard庫(kù),并且隨著時(shí)間的推移,你可以花費(fèi)額外的精力將其余代碼遷移到.NET Standard。
\\關(guān)于工具的簡(jiǎn)要說(shuō)明
\\一直以來(lái),每個(gè).NET變體都有自己的專用開(kāi)發(fā)工具。Visual Studio用于.NET Framework開(kāi)發(fā),MonoDevelop用于Mono開(kāi)發(fā),Visual Studio Code主要用于.NET Core開(kāi)發(fā)。到了最近,這些界限開(kāi)始漸漸模糊。除.NET Framework之外,現(xiàn)在可以使用Visual Studio開(kāi)發(fā)Xamarin、.NET Core和.NET Standard。Visual Studio Code最初是一個(gè)源代碼編輯器,但現(xiàn)在已經(jīng)成為一個(gè)更加完整的開(kāi)發(fā)環(huán)境,可用于開(kāi)發(fā).NET Framework或.NET Core。Xamarin Studio(基于MonoDevelop)已被Windows(他們推薦使用Visual Studio)棄用,現(xiàn)在變成Visual Studio for Mac,可用于開(kāi)發(fā)Xamarin或.NET Core。因此,除非你正在開(kāi)發(fā).NET Framework(在這種情況下應(yīng)該使用Visual Studio),否則可以根據(jù)其他需求選擇合適的環(huán)境。
\\結(jié)論
\\.NET“大爆炸”產(chǎn)生了很多.NET變體,其中一些已經(jīng)消亡,其他一些則占據(jù)了非常狹小的市場(chǎng)空間,另一些正在蓬勃發(fā)展。蓬勃發(fā)展的.NET變種之間的相似性足以讓開(kāi)發(fā)者感到困惑,并且不確定要使用哪一個(gè),但其實(shí)在它們之間做出選擇很簡(jiǎn)單。如果你要?jiǎng)?chuàng)建一個(gè)只能在Windows上運(yùn)行的應(yīng)用程序,請(qǐng)使用原始的.NET Framework。如果你希望應(yīng)用程序能夠在多個(gè)平臺(tái)上運(yùn)行,并且需要接近完整的.NET Framework API,請(qǐng)使用Mono。如果將現(xiàn)有的.NET Framework應(yīng)用程序遷移到Windows以外的其他平臺(tái),Mono也是一個(gè)很好的選擇。如果你創(chuàng)建的跨平臺(tái)應(yīng)用程序可以使用.NET Core提供的不完整API,那么可以考慮.NET Core。最后,可以考慮使用.NET Standard創(chuàng)建可在.NET Framework、.NET Core或Xamarin上運(yùn)行的庫(kù),并在面向特定平臺(tái)的組件中隔離面向特定平臺(tái)的部分,例如用戶界面。
\\關(guān)于作者
\\Dr. Wayne Citrin?博士是JNBridge有限責(zé)任公司的首席技術(shù)官兼聯(lián)合創(chuàng)始人,JNBridge有限責(zé)任公司是領(lǐng)先的Java和.NET互操作工具供應(yīng)商。他是屢獲殊榮的橋接技術(shù)JNBridgePro和適用于.NET和BizTalk的JMS Adapters架構(gòu)師,Citrin自.NET推出測(cè)試版本以來(lái)一直在解決Java和.NET的互操作性問(wèn)題。Citrin曾擔(dān)任編程語(yǔ)言和編譯器方面的研究員,并在科羅拉多大學(xué)博爾德分校擔(dān)任計(jì)算機(jī)工程系教授。
\\查看英文原文:Understanding the Varieties of .NET
總結(jié)
以上是生活随笔為你收集整理的一文看懂.NET的各种变体的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: paramiko基础
- 下一篇: 4.1 df命令 4.2 du命令 4.