.NET:持續進化的統一開發平台


閱讀文本大概需要 8 分鍾。

標題使用的是進化這個詞語,是因為 .NET 在不斷的努力,也在不斷的重構。
這篇文章的更多目的和意義在於科普,俗稱“傳教”。

持續進化的 .NET

image.png

這張圖即是一個學習的路線圖同樣他也是 .NET 平台的進化圖。也是代表着 未來.NET 的發展方向。
今天的故事呢,就會根據上圖中的名詞一個個的解釋下來。讓各位更好的了解.NET 。

.NET到底是什么?

在過去的日子中大家提到 .NET 通常是指 .NET Framework 這么一個框架。但是隨着.NET技術的發展,時至今日,廣義的 .NET指包含 .NET Framework.NET CoreMono在內,是基於.NET技術的整個產品系列。

.NET 是一個通用開發平台。 它具有幾項關鍵功能,例如支持多種編程語言、異步和並發編程模型以及本機互操作性,可以支持跨多個平台的各種方案。
.NET 開發可以實現包括 .NET Framework、.NET Core 和 Mono。 .NET 的所有實現都有一個名為 .NET Standard 的通用 API 規范。
.NET 擁有驚人的性能和開發效率,並且擁有數百萬的開發者。

以上就是最新的.NET的介紹。以后提到.NET 不再僅僅是.NET Framework 了。

我也就微軟着新生的 .NET 或者說進化后的.NET來說說過往吧。

.NET Framework

傳統的 .NET Framework是以一種采用系統虛擬機運行的編程平台,以(通用語言運行庫)CLR(Common Language Runtime)為基礎,支持多種語言(C#、F#、VB .NET、C++、Python等)的開發。

這也是我們目前市面上用到最多也是大家最熟悉的.NET,它是目前在市場中的占比是最大的,他很成熟也很穩定,但是他的弱點是在於他天生不具備跨平台,這也是被廣大程序員所詬病的,他需要跨平台,是需要通過配合Mono來使用,它更多的運行在Windows服務器上,需要IIS作為宿主。

而提到.NET Framework就不得不提到Java了。

.NET Framework VS Java

甲骨文(Oracle)公司的Java語言和J2ee技術是.NET平台的競爭對手之一。

說起.NET的起源,還得先說到Java。眾所周知,Java是一個主打敏捷開發,跨平台的編程語言。而.NET的誕生,與Java有着千絲萬縷的聯系。

Java的歷史可以追溯到20世紀90年代,最初是由Sun公司為了實現電子產品智能化而開發的程序語言,主打的設計思想是敏捷開發和跨平台。1995年Java正式推出之后,立刻受到了包括IBM、Apple、Adobe、HP和微軟在內的各大公司的追捧。隨后幾年Java的發展勢如破竹,作為一款收費產品,Java給Sun公司帶來了非常可觀的盈利(Java已於2006年底宣布免費開源)。而微軟作為軟件大廠,當然不願看着Java一家獨大,同時也意識到了敏捷開發的巨大前景,由此誕生了Microsoft .NET。

.NET框架作為Visual Studio的組件之一發放,自2002年全新VS .NET搭載.NET 1.0起,.NET至今已更新四個主版本,.NET 4.0於2010年隨VS2010發布, 目前最新的 .NET Framework 版本為4.7.1。來源

.NET與Java有非常多的相似之處,二者都是即時編譯(JIT)的動態語言。這類語言中,項目編譯生成的目標文件並不是機器碼,而是需要由運行時環境進行即時編譯的特殊代碼。在Java中這種特殊代碼叫做字節碼(bytecode),而.NET中則叫做中間語言(Common Intermediate Language,簡稱IL)。Java官方的運行時環境叫做JRE(Java Runtime Environment),而.NET官方的運行時環境叫做CLR(Common Language Runtime)。

**而我要吐槽的地方就在這里 ** 經常有很多人唱衰.NET 說BAT都不用 .NET 都是用java的。

為什么國內的互聯網公司都使用的是JAVA呢?

撥開迷霧看本質。

  • 阿里巴巴 1999年成立
  • 百度2000年成立
  • 騰訊 1998年成立 。

.NET 2002年才發布1.0版本。。你告訴我 他們有的選嗎?

有人要提出京東 是從.NET 轉的java ?

為什么,因為那個時候 .NET 不開源沒有現成的大型電商、分布式、集群的解決方案,而java有大把的電商和互聯網人才,注定了會選擇JAVA而不是 .NET 。
或許還有就是舍不得錢啊,畢竟 windows 服務器的授權費貴。 ~皮一下很開心。
所以 .NET 錯在於它出生的晚了,不支持跨平台。 中國的互聯網公司一開始就沒有什么選擇。

.NET的跨平台之路

在和Java 的博弈和對戰中,我們都知道 .NET Framework一直被吊打,尤其在國內。好在 2014年11月12日,微軟宣布將完全開放.NET框架的源代碼,並提供給Linux和OS X使用。[來源]

聽了這么一則新聞之后大家知道 .NET或許還有機會打一波翻身仗。但是早在這個新聞之前其實就有Mono這么一個 .NET 跨平台解決方案。

Mono 神奇的跨平台解決方案

所以如果有人問你,.NET Framework 怎么跨平台,告訴他,可以使用Mono。
那 Mono 到底是什么?
它為什么可以跨平台?

在 .NET 開源之前,需要首先了解 Mono,了解 Mono [維基Mono]

考慮到大多人咳咳不方便搭梯子以及英文不是很好,我摘錄和轉載了幾個博主的文章。

.NET Framework是由微軟獨立開發,閉源且具有專利性質的獨家技術,並且微軟只提供了針對Windows系統的支持。而作為同類競爭對手的Java,卻能通殺包括x86、ARM在內的主流硬件平台,軟件方面也支持包括Windows、Linux、Android在內的各種桌面、移動、嵌入式系統。

Mono 是一個由 Xamarin 公司(先前是 Novell,最早為 Ximian)所主持的自由開放源代碼項目。該項目的目標是創建一系列符合 ECMA 標准(Ecma-334 和 Ecma-335)的 .NET 工具,包括 C# 編譯器通用語言架構。與微軟的 .NET Framework(共通語言運行平台)不同,Mono 項目不僅可以運行於 Windows 系統上,還可以運行於 Linux,FreeBSD,Unix,OS X 和 Solaris,甚至一些游戲平台,例如:Playstation 3,Wii 或 XBox 360

因此,為了提升.NET的平台適應性,微軟在.NET發展之初就建立了一套對於.NET中間語言的實現規范——.NET Common Language Infrastructure,這相當於一套關於.NET中間語言(IL)的語法手冊,微軟希望通過這種方式讓第三方和開源社區來參與.NET的平台移植。

Ximian公司是最早參與這項工作的成員之一,並於2004年6月發布了第一代.NET跨平台產品——Mono 1.0。

Mono與微軟官方的CLR一樣,都是對 .NET CLI(Common Language Infrastructure)的實現,他們都能對.NET的中間代碼(IL)提供實時編譯。不同的是,CLR只支持Windows系統,而Mono如今已支持包括Windows、Linux、macOS、iOS、Android在內的各種主流平台和操作系統。

著名的游戲引擎Unity3D就包含了Mono,我們所熟知的《Tample Run 神廟逃亡》、《爐石傳說》、《Deemo》等游戲都是基於Unity3D開發的(包含.NET和Mono的技術)。

值得一提的是,Mono是一個有故事的項目,十幾年來歷經波折,幾經轉手,於2011年落入Xamarin公司手中,其間Mono還與微軟發生過專利糾紛。

終於在 2016年2月,微軟正式收購Xamarin,從此Mono回到了微軟霸霸的懷抱,成了親生兒子,同時微軟宣布Mono面向社區免費。在2016年11月的Connect(); //2016開發者大會中,微軟還發布了基於Xamarin Studio改造的Visual Studio for mac。

看看Mono這么牛逼 可以在微軟閉源的情況下,還讓.NET 跨平台的 他到底是怎么個牛逼法呢。
這就牽扯到了一個問題“.NET 應用程序是怎么運行的?” 想知道答案的朋友們可以去好好看 ** 魅力 .NET:從 Mono、.NET Core 說起**

Xamarin

考慮如何生成 iOS 和 Android 應用程序時,許多用戶都認為本機語言、Objective-C、Swift 和 Java 是唯一的選擇。 但是,在過去幾年中,一個全新的生成移動應用程序平台的生態系統已經出現了。
Xamarin將.NET的強大功能和生產力帶入iOS和Android,重用技巧和代碼,同時獲得本地API和性能。
Xamarin 是唯一能通過提供跨 iOS、Android 和 Windows Phone(Windows Phone 的本機語言已經是 C#)這三種平台可正常工作的單一語言 - C#、類庫和運行時,卻仍能編譯性能甚至足以滿足高要求游戲的本機(非解釋型)應用程序的平台。
來一張對比圖
image.png

Hybrid 是指混合開發,目前的ionic 、weex、MUI 均在此列表中。

React Native 是Facebook推出的基於React的做的框架,也很生猛目前在社區的生命力很旺盛。

.NET Standard

某明奇妙提到的這個 .NET Standard 其實是未來的.NET 核心,一切基於它來實現代碼的共享。

.NET Standard 進一步實現跨平台跨設備的代碼共享

.NET Standard 是一組由 .NET 實現的基類庫實現的 API。 更正式地說,它是構成協定統一集(這些協定是編寫代碼的依據)的特定 .NET API 組。 這些協定在每個 .NET 實現中實現。 這可實現不同 .NET 實現間的可移植性,有效地使代碼可在任何位置運行。

.NET Standard 也是一個目標框架。 如果代碼面向 .NET Standard 版本,則它可在支持該 .NET Standard 版本的任何 .NET 實現上運行。

.NET Core

最后,終於來到了現在火熱的.NET Core 。

自 .NET Framework發布至今已有十余年,由於微軟過於保守的版權策略,.NET一直作為Windows平台的封閉產品。盡管有Mono項目對.NET實現了平台移植,但畢竟不是微軟“親生”,Mono在一些實現上仍然不夠完美。

隨着2014年Xamarin和微軟發起.NET基金會,微軟在2014年11月份開放.NET框架源代碼。隨后在.NET開源基金會的統一規划下誕生了 .NET Core。

(注:.NET Core早期被稱為 .NET vNext或 .NET 5,直到2016年1月才正式命名為 .NET Core 1.0)

需要注意的是,盡管微軟把 .NET Core作為.NET未來的發展方向,但 .NET Core和 .NET Framework仍然是兩個獨立的產品。.NET Framework也會繼續更新和維護。

.NET Core與 .NET Framework最大的區別在於 .NET Core是完全開源的,托管在github上,支持任何人向項目貢獻代碼。並且,.NET Core不再是Windows獨占,還支持Linux、macOS等多種平台。

而 .NET Core 是.NET Framework的新一代版本,或者說是其進化版本,是微軟開發的第一個跨平台 (Windows、Mac OSX、Linux) 的應用程序開發框架(Application Framework),未來也將會支持 FreeBSD 與 Alpine 平台。.Net Core也是微軟在一開始發展時就開源的軟件平台,它經常也會拿來和現有的開源 .NET 平台 Mono 比較。

由於 .NET Core 的開發目標是跨平台的 .NET 平台,因此 .NET Core 會包含 .NET Framework 的類庫,但與 .NET Framework 不同的是 .NET Core 采用包化 (Packages) 的管理方式,應用程序只需要獲取需要的組件即可,與 .NET Framework 大包式安裝的作法截然不同,同時各包亦有獨立的版本線 (Version line),不再硬性要求應用程序跟隨主線版本。

2016年6月27日 在RedHat DevNation 峰會上宣布了 .NET Core & ASP .NET Core 1.0 RTM 的發行。
而目前最新的 .NET Core 版本為2.1.4。

.NET Core的核心點: 創新、開源、跨平台

用更少的時間做更多有趣的事情

Develop high performance applications in less time, on any platform.
翻譯后:用更少的時間,在任何(全)平台上開發高性能應用程序。
以上描述說的就是 .NET Core。

參考鏈接:Develop high performance applications in less time, on any platform

特點如下:

  • 跨平台

您可以創建在Windows,Linux和MacOS上運行的.NET Core應用程序。

  • 統一

利用統一的.NET標准庫(.NET Standard),使用相同的代碼定位所有平台,並使用相同的語言和工具重用您的技能。

  • 輕量級

沒有影響部署和模塊化開發模型,您只需要依賴於您所需的最少組件包。

  • 現代

多語言支持C#,VB,F#和現代結構,如泛型,語言集成查詢(LINQ),異步支持等等。

  • 開源

運行庫,庫,編譯器,語言和工具都是GitHub上的開源代碼,接受代碼貢獻,測試和完全支持。

.NET Core 與其他平台的關系

.NET Core 經常會拿來與其他平台做類比,尤其是它的源頭 .NET Framework 以及另一個相似性質的開源平台 Mono。
為了讓大家,更好的理解下,我闡述下吧。

.NET Framework

據微軟的幫助,.NET Core 和 .NET Framework 是子集 (Subset) 與超集 (Superset) 的關系,.NET Core 將會實現出部分的 .NET Framework 功能 (基本上是不含用戶界面的部分),例如 JIT (.NET Core 采用 RyuJIT)、垃圾收集器 (GC) 以及類型 (包含基本類型以及泛型類型等)[10]。未來 .NET Framework 和 .NET Core 也將會是各自發展,但它們也會同時使用彼此的功能,例如 .NET Compiler Platform 與 RyuJIT 等技術。

Mono

Mono 是另一個已發展許久的 .NET Framework 跨平台開源版本,基本上並不隸屬微軟官方,而是由社區的力量所主導,自成一個生態系統,也開發出了像Xamarin這樣的跨平台.NET移動應用,.NET Core 與 Mono 未來會是合作的關系,Mono 仍會維持社區力量的維護與發展,而 .NET Core 則會以官方角度來進行發展,兩邊也會一起進行彼此功能上的增進。

.NET Core 與 ASP .NET Core 的關系

其實一開始並不是主從關系 [11],ASP.NET Core 的開發初期 (ASP.NET 5) .NET Core 還沒有開始起跑,因此 ASP.NET Core 當時有自己的運行期與工具,一開始稱為 Project K,后來改為 DNX (.NET Execution Environment),DNX 本身就具有可獨立運作的運行能力,不需要依賴 .NET Core 運行,但是這樣會變成 .NET Core 和 ASP.NET Core 雙頭馬車的現象,在 .NET Core 逐漸成熟之后,微軟也決定要將這兩個各自獨立發展的產品線集成在一起,DNX 也將因改用 .NET Core 運行期而終止開發,DNX 的功能將由 .NET Core 以及旗下的 .NET CLI 接替提供,集成后的版本將在 1.0 RC2 時發布。

ASP .NET

嚴謹來說,ASP.NET本不應該放在此處與以上三個框架平行,但是因為ASP .NET太出名了,因此我不得不在這說清關系。

ASP.NET最初是.NET Framework框架中的一個組件,用於開發Web應用程序。它是ASP技術的改進版本,需要注意的是,ASP與ASP.NET是完全不同的兩個產品。同理,VB和VB.NET也是完全不同的兩個產品。ASP和VB都是上個世紀的技術,過於古老在此不再贅述,但請務必注意區分它們。

早期的ASP.NET提供一種叫做WebForm的方式用於呈現網頁,它可以讓網頁開發變得像WinForm開發一樣簡單且可視化。但由於WEB技術的飛速發展,WebForm由於其低效、封閉和難以定制的缺陷已經逐漸淡出歷史舞台。

隨着.NET 3.5的發布,微軟提供了全新的ASP.NET網頁呈現方式,稱為ASP.NET MVC Framework。這套框架遵循MVC設計模式思想,將視圖和邏輯進行了很好的分離,並且大幅提升了性能和可定制性。

經過多年發展,目前已經更新到了ASP.NET MVC6,MVC6完全采用.NET Core的項目結構,支持Framework、Core、Mono多種運行時。因此,ASP.NET MVC6也被稱為ASP.NET Core。

ASP.NET Core

歷史的進程

ASP.NET Core 是新一代的 ASP.NET,早期稱為 ASP.NET vNext,並且在推出初期命名為 ASP.NET 5,但隨着 .NET Core 的成熟,以及 ASP.NET 5 的命名會使得外界將它視為 ASP.NET 的升級版,但它其實是新一代從頭開始打造的 ASP.NET 核心功能,因此微軟宣布將它改為與 .NET Core 同步的名稱[1],即 ASP.NET Core。

ASP.NET Core 可運行於 Windows 平台以及非 Windows 平台,如 Mac OSX 以及 Ubuntu Linux 操作系統,是 Microsoft 第一個具有跨平台能力的 Web 開發框架。

微軟在一開始開發時就將 ASP.NET Core 開源,因此它也是開源項目的一員,由 .NET 基金會 (.NET Foundation) 所管理。

現在的責任

ASP .NET Core 是一個跨平台的高性能開源框架,用於生成基於雲且連接 Internet 的新式應用程序。
使用 ASP.NET Core,可以:

  • 生成 Web 應用和服務、IoT 應用和移動后端。
  • 在 Windows、macOS 和 Linux 上使用喜愛的開發工具。
  • 部署到雲或本地。
  • 在 .NET Core 或 .NET Framework 上運行。

image.png

注1:隨着.NET技術的發展,時至今日,廣義的 .NET指包含.NET Framework,.NET Core,Mono在內,是基於.NET技術的整個產品系列。而在過去的習慣中,.NET通常特指.NET Framework這一個最正統的框架。

注2:.Net Core也有兩重概念,廣義來說,Core指全新的一整套框架,包括運行時,命令行工具,項目結構定義等等。Core結構的項目,支持指定Framework、Mono或者Core中的一者或多者作為運行時環境。而狹義上的Core,僅特指 .NET Core CLR(運行時)。請根據上下文和語境區分其定義。

如何在Windows,Linux和macOS上選擇順手的.NET開發工具.

如果您不確定從哪里開始?我們建議嘗試Visual Studio

Visual Studio

Windows上的全功能集成開發環境(IDE),用於構建各種類型的.NET應用程序。宇宙最強大的編譯器。

Visual Studio Code

在Linux,macOS或Windows上開發以構建跨平台網站和服務。安裝C#擴展以獲得最佳體驗。

適用於Mac的Visual Studio

使用Xamarin構建原生Android,iOS,macOS和Windows應用程序,以及使用ASP.NET Core創建網站和服務。

OmniSharp

編輯器中的跨平台.NET開發,如Atom,Brackets,Sublime Text,Emacs和Vim。

JetBrains Rider

使用IntelliJ和ReSharper技術構建的跨平台.NET IDE。它為所有平台上的.NET和.NET核心應用程序提供支持。

.NET Core CLI

用於在Linux,macOS和Windows上開發跨平台網站和服務的命令行界面(CLI)。

尾聲

最后推薦一本小書:《.NET 傳奇:封閉到開放的歷程》
所以2018全面撲騰到 .NET CORE吧 !

順帶一提,您如果在文章中看到一些錯誤和疏漏,還請指出,或者到github上進行修改提交PR。非常感謝。

image.png

我們再回過頭來看這張圖是不是清晰了很多呢。

參考文獻:

https://en.wikipedia.org/wiki/Mono_(software)
https://wc.yooooo.us/wiki/.NET_Core
http://www.cnblogs.com/xishuai/p/mono-dotnetcore.html
http://www.jubeat.net/2016/09/25/dotnet-core-prologue/
https://wc.yooooo.us/wiki/.NET框架
https://wc.yooooo.us/wiki/ASP.NET
https://wc.yooooo.us/wiki/ASP.NET_Core


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM