1. <em id="2qvri"><tr id="2qvri"></tr></em>
      1. 首頁»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

        QQ群:WEB開發者官方群(515171538),驗證消息:10000
        微信群:加小編微信 849023636 邀請您加入,驗證消息:10000
        提示:更多精彩內容關注微信公眾號:全棧開發者中心(fsder-com)
        網友評論(共0條評論) 正在載入評論......
        理智評論文明上網,拒絕惡意謾罵 發表評論 / 共0條評論
        登錄會員中心
        江苏快3投注技巧