自1995年網際網路戰略日以來最雄心勃勃的事業 —— 微軟.NET戰略, 2000年6月30日。
微軟公司於2002年2月13日正式推出第一代.NET平臺 .NET Framewrok 1.0。藉助於自家強大易用的 Windows 系統,.NET Framework1.0 主要提供了面向 Windows 桌面(Windows Form)和伺服器(ASP.NET Web Forms)的基礎開發框架。在宇宙第一IDE(Visual Studio)中使用這兩款框架進行業務系統開發,框架中都提供了功能強大的控制元件、元件,開發者通過視覺化程式設計方式進行開發就非常容易上手,而且開發速度非常快,因此.NET平臺深受全世界開發者的喜愛,發展一路順風順水。
在.NET(舊稱.NET Framework )發展過程中,其最大的競爭對手就是Java。Java是主打敏捷開發、跨平臺的程式語言,自1995年推出Java正式版以來,憑藉其天生的跨平臺(Windows、Linux、MacOS)優勢,發展至今在全世界開發者市場與生態圈層面遠遠超過.NET平臺。.NET Framework 與 Windows 平臺深度繫結,無法做到跨平臺,所以一直處於被Java壓制的狀態。
網際網路技術飛速發展至今,傳統的桌面程式與Web應用已無法滿足各行各業的多場景應用需求。雲端計算、人工智慧、大資料以及雲原生等新興技術方向在現代IT時代掀起了一波又一波浪潮。傳統的 .NET Framework 技術極大地限制了.NET平臺的應用範圍與發展,面對如此尷尬的局面與現狀,微軟審時度勢,於2014年推出跨平臺解決方案.NET Core。
2014年11月12日,微軟ASP.NET之父Scott Guthrie 在 Connect 全球開發者線上會議上宣佈,微軟將開源全部的.NET Core 執行時,並將.NET 擴充套件為可在Linux和maxOS平臺上開發與執行,從而讓.NET應用實現跨平臺。
dotnet/runtime 開源地址:https://github.com/dotnet/runtime
dotnet/core 發行日志: https://github.com/dotnet/core/tree/main/release-notes
dotnet SDK 下載地址: https://dotnet.microsoft.com/download
.NET Core 的推出是微軟.NET技術發展史上又一個重要里程碑。.NET Core是.NET技術的重要變革,它將全世界.NET開發者帶入一個全新的開發領域。
.NET Core is a free, cross-platform, open-source developer platform for building many different types of applications. 這是微軟官方給出的定義:.NET Core是一個免費、跨平臺、開源的開發平臺,用於構建許多不同型別的應用程式。
.NET Core 設計目標有包含:
- 支援或可以移轉 (port) 到更多的作業系統平臺與晶片架構 (未來專案會跨出 x86 平臺。目前已至此x64、arm)。
- 具有引人注目的效能與高可靠度。
- 開發人員能快速與直接的獲取 .NET Core 開發環境。
- 在直覺與具生產力的情況下建造應用程式,使用檔案,示例與 NuGet 元件。
.NET Core 是由許多專案所組成,除了基本的類庫(Core FX) 之外,也包含採用 RyuJIT 編譯的執行平臺 Core CLR、編譯器平臺.NET Compiler Platform、採用 AOT 編譯技術執行最優化的包 Core RT (.NET Core Runtime),以及跨平臺的 MSIL 編譯器 LLILC (LLVM-based MSIL Compiler) 等專案。
同時,微軟也發展了一個建置技術檔案的平臺docfx, 並運用於 .NET Core 的檔案網站。
- Roslyn
.NET Compiler Platform (專案程式碼為 Roslyn) 是將 .NET平臺的編譯架構標準化的平臺,它可提供程式管理工具 (如整合開發環境) 相當多的情報,用以發展有助於編寫程式與管理程式結構所需要的功能,例如型別資訊、語法結構、參考連結、語義、編譯器、自動化、錯誤回報等等功能,只要是遵循 CLI 標準的程式語言,都可以利用 .NET Compiler Platform 實現出編譯器,讓程式管理工具能實現如語法提示、語法自動完成、關鍵字高亮等視覺化能力。
.NET Compiler Platform 可同時支援 .NET Framework 4.6 以上版本,.NET Core 也原生支援。
- RyuJIT
RyuJIT 是微軟發展的新式即時編譯器 (Just-in-Time Compiler),用以替換現有的 .NET Framework 的 JIT 以及 JIT64 即地編譯器,依據微軟公佈的測試報告,RyuJIT 的效能較前一代的 JIT 提升約 25%,並支援SIMD(Single Instruction, Multiple Data) 的技術。RyuJIT 同時應用於 .NET Framework 4.6 以及 .NET Core 。
- Core CLR
Core CLR 移植 .NET Framework 的 CLR 的功能,包含核心程式庫 mscorlib、JIT 編譯器、垃圾收集器 (GC) 以及其他執行 MSIL 所需要的執行期環境。
- Core RT
Core RT 是以AOT (Ahead-of-time) 編譯方式為主的核心功能,在 .NET Core 內稱為 Core RT,在 UWP 則是稱為 .NET Native。
Core RT 會在建造時期 (非執行期) 在編譯時將 MSIL 轉換成平臺本地的機器碼,以獲取較短的引導時間 (JIT 採用的是執行時期編譯,使得引導時間拉長),以及記憶體用量減少的優點。Core RT 會在不同的平臺使用不同的 AOT 技術:
· Windows 上使用的是 .NET Native。
· macOS 與 Linux 上使用的是 LLILC (同時支援 JIT 和 AOT)。
- LLILC
LLILC (LLVM-based MSILCompiler,英文發音為 "lilac") 是 .NET Core 在非 Windows 平臺的 MSIL 編譯器 ,基於 ECMA-335 (Common Language Infrastructure) 的標準將 MSIL 編譯成原生碼執行,適用於可執行 LLVM 的作業系統,例如 macOS與 Linux 作業系統。LLILC 同時支援 JIT (內含 RyuJIT 的實現) 以及 AOT (未來將開始支援) 的編譯方式。
- CoreFX(.NET Core Libraries)
CoreFX主要包含數個公共庫,例如 System.Collections, System.IO, System.Xml等。CoreFX是 .NET Standard Library 的實現,同樣的.NET Framework 4.6.3也是基於.NET Standard Library的實現。它們目前都是基於.NET Standard Library1.6版本,具體見下表:
開源地址:https://github.com/dotnet/corefxlab
.NET Core 的類庫採用 NuGet 包化的架構,應用程式只需要使用 project.json 的 dependencies 區塊加入指定包版本的參考,就能獲得該包的功能,與以往 .NET Framework 大包式的提供方法完全不同。.NET Core 團隊宣佈己經有 98% 的 .NET Framework 主要類庫移轉到 .NET Core 平臺。
-
Microsoft.DotNet.CoreHost
-
NETStandard.Platform
-
System.Collections.Concurrent
-
System.Linq
-
System.Runtime.Numerics
-
System.Text.RegularExpressions
-
Microsoft.NETCore.Platforms
-
Microsoft.NETCore.Runtime
-
Microsoft.Win32.Primitives
-
System.AppContext
-
System.Collections
-
System.Diagnostics.Debug
-
System.Diagnostics.Tools
-
System.Diagnostics.Tracing
-
System.Globalization
-
System.Globalization.Calendars
-
System.IO
-
System.IO.FileSystem
-
System.IO.FileSystem.Primitives
-
System.Net.Primitives
-
System.Net.Sockets
-
System.Reflection
-
System.Reflection.Extensions
-
System.Reflection.Primitives
-
System.Reflection.TypeExtensions
-
System.Runtime
-
System.Runtime.Extensions
-
System.Runtime.Handles
-
System.Runtime.InteropServices
-
System.Runtime.InteropServices.RuntimeInformation
-
System.Text.Encoding
-
System.Text.Encoding.Extensions
-
System.Threading
-
System.Threading.Tasks
-
System.Threading.Timer
.NET Core 基於跨平臺能力,並沒有將與 GUI 高度相關的 API 移植到 .NET Core 內,因此像是Windows Forms或是Windows Presentation Foundation(WPF) 並未移植到 .NET Core。.NET Core 支援控制檯應用程式 (Console Application) 以及類庫 (Class Library) 型別的專案。
不過微軟在其Universal Windows Platform(UWP) 開發平臺使用了 .NET Core ,並且利用 .NET Native 技術將其效能提升至十分接近原生碼的速度。
ASP.NET Core 則以控制檯應用程式驅動其託管環境 Kestrel Server 以支援 ASP.NET Core 程式的執行。
.NET CLI (Command-Line Interface) 指令列工具是 .NET Core 處理建造、執行與編輯工作的主要工具 ,有幾個主要的動作:
指令
|
幫助
|
---|---|
dotnet new
|
產生新的基本 .NET 專案內容 (包含 project.json、Program.cs 以及 NuGet.config)
|
dotnet restore
|
還原所參考的 NuGet 包
|
dotnet build
|
建造 .NET 專案
|
dotnet publish
|
產生可發行的 .NET 專案 (包含所屬的 Runtime)
|
dotnet run
|
編譯與立即執行 .NET 專案 (較適用於 exe 型專案)
|
dotnet repl
|
引導互動式的對話
|
dotnet pack
|
將專案的產出封裝成 NuGet 包
|
提示:命令都是神一般的存在,我們凡人還是使用 Visual Studio 進行開發、編譯、釋出,效率最高。
.NET Core 經常會拿來與其他平臺做類比,尤其是它的源頭 .NET Framework 以及另一個相似性質的開源平臺 Mono。
下表列出了當前支援的 .NET 版本以及支援它們的 Windows 版本。 這些版本在 .NET 版本達到支援終止日期或 Windows 版本達到生命週期之前仍受支援。
Windows 10 版本終止服務日期按版本分段。 下表中僅考慮家庭版、專業版、專業教育版和專業工作站版。 檢視 Windows 生命週期事實表單,瞭解具體的詳細資訊。
- 在 Windows 上安裝 .NET (參考:https://docs.microsoft.com/zh-cn/dotnet/core/install/windows?tabs=net50)
- 支援的版本
- 不支援的版本
以下 .NET 版本 ❌ 不再受到支援:
- 在 macOS 上安裝 .NET(參考:https://docs.microsoft.com/zh-cn/dotnet/core/install/macos)
- 在 Linux 上安裝 .NET (參考:https://docs.microsoft.com/zh-cn/dotnet/core/install/linux)
.NET Core/.NET6 平臺目前支援7大應用方向:桌面開發、網頁開發、遊戲開發、移動應用、雲端計算、物聯網IoT、人工智慧AI (機器學習ML.NET、大資料.NET for Apache Spark )。
參考連結
【1】https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md
【2】https://github.com/dotnet/corefx
【3】https://github.com/dotnet/corefx/blob/master/Documentation/project-docs/glossary.md
【4】https://www.microsoft.com/net/core#windows
【5】https://msdn.microsoft.com/en-us/library/dn807190(v=vs.110).aspx
【6】https://blogs.msdn.microsoft.com/dotnet/2013/09/30/ryujit-the-next-generation-jit-compiler-for-net/