.Net Core是微軟推出的一個(gè)參考.net framework重新開發(fā)的.NET實(shí)現(xiàn),它是未來(lái)的所有.NET平臺(tái)的基礎(chǔ)。支持跨平臺(tái),即支持在Window,macOS,Linux等系統(tǒng)上的開發(fā)和部署,并且可以在硬件設(shè)備,云服務(wù),和嵌入式/物聯(lián)網(wǎng)方案中進(jìn)行使用,需要的朋友們可以下載試試吧!
隨著.NET Core Framework的開發(fā)完成,.net framework與Mono將基于.NETCore重新構(gòu)建。.NET Framework將成為.NET Core在Windows上的一個(gè)發(fā)行版,Mono將成為.NETCore的一個(gè)跨平臺(tái)發(fā)行版。
.NET Core是一個(gè)開源的、跨平臺(tái)的.NET實(shí)現(xiàn),是新一代.NET的基石,支持Windows, Linux, macOS, 以及Docker。
.net平臺(tái)三大件
1、C#語(yǔ)言,也就是ECMA-334,這是天生跨平臺(tái)的,C#的附帶內(nèi)容,你應(yīng)該徹底的明白公共運(yùn)行時(shí)(CLR)。CLR以及公共語(yǔ)言基礎(chǔ)(CLI)標(biāo)準(zhǔn)在ECMA-335中有定義,這也是CLR標(biāo)準(zhǔn)。
2、Visual Studio,這是天生不能跨平臺(tái)的,Mono有Xamarin studio;
3、.NET Framework基礎(chǔ)類庫(kù)。如果.NETFramework基礎(chǔ)類庫(kù)不能跨平臺(tái),沒人會(huì)關(guān)心.NET的跨平臺(tái)。所以微軟不得不投入大量精力去開發(fā)全新的.NET Core Framework,一邊將.NET Framework中有用的代碼搬過來(lái),一邊根據(jù)跨平臺(tái)的需求重新實(shí)現(xiàn)。
從上面的分析,.NET跨平臺(tái)的最大障礙就是基礎(chǔ)類庫(kù)的跨平臺(tái),由此也可以看出.NET基礎(chǔ)類庫(kù)的重要性。Mono也是在基礎(chǔ)類庫(kù)的實(shí)現(xiàn)上存在瑕疵,比如對(duì)WPF,WCF等框架的支持上不完善。像WPF這樣的用戶界面開發(fā)技術(shù),各個(gè)平臺(tái)上都有自己的原生開發(fā)庫(kù),用戶界面應(yīng)用原生開發(fā),iOS應(yīng)用應(yīng)該用iOS的用戶界面庫(kù)才會(huì)讓人覺得在iOS上最合適,.NET應(yīng)用應(yīng)該用微軟的Windows用戶界面庫(kù)。
.NET Core SDK包含
.NETCore是由許多項(xiàng)目所組成,除了基本的類庫(kù)(CoreFX) 之外,也包含采用 RyuJIT 編譯的運(yùn)行平臺(tái)CoreCLR、編譯器平臺(tái).NETCompiler Platform、采用 AOT 編譯技術(shù)運(yùn)行最優(yōu)化的包CoreRT (.NETCoreRuntime),以及跨平臺(tái)的 MSIL 編譯器 LLILC (LLVM-based MSIL Compiler) 等項(xiàng)目。
同時(shí),微軟也發(fā)展了一個(gè)建置技術(shù)文件的平臺(tái)docfx,并運(yùn)用于.NETCore的文件網(wǎng)站。
RyuJIT
RyuJIT 是微軟發(fā)展的新式即地編譯器 (Just-in-Time Compiler),用以替換現(xiàn)有的.NETFramework 的 JIT 以及 JIT64 即地編譯器,依據(jù)微軟公布的測(cè)試報(bào)告,RyuJIT 的性能較前一代的 JIT 提升約 25%,并支持SIMD(Single Instruction, Multiple Data) 的技術(shù)。RyuJIT 同時(shí)應(yīng)用于.NETFramework 4.6 以及.NETCore。
CoreCLR
CoreCLR 移植.NETFramework 的 CLR 的功能,包含核心程序庫(kù) mscorlib、JIT 編譯器、垃圾收集器 (GC) 以及其他運(yùn)行 MSIL 所需要的運(yùn)行期環(huán)境。
CoreRT
CoreRT 是以AOT (Ahead-of-time) 編譯方式為主的核心功能,在.NETCore內(nèi)稱為CoreRT,在 UWP 則是稱為.NETNative。
CoreRT 會(huì)在建造時(shí)期 (非運(yùn)行期) 在編譯時(shí)將 MSIL 轉(zhuǎn)換成平臺(tái)本地的機(jī)器碼,以獲取較短的引導(dǎo)時(shí)間 (JIT 采用的是運(yùn)行時(shí)期編譯,使得引導(dǎo)時(shí)間拉長(zhǎng)),以及內(nèi)存用量減少的優(yōu)點(diǎn)。CoreRT 會(huì)在不同的平臺(tái)使用不同的 AOT 技術(shù):
Windows 上使用的是.NETNative。
Mac OS 與 Linux 上使用的是 LLILC (同時(shí)支持 JIT 和 AOT)。
LLILC
LLILC (LLVM-based MSILCompiler,英文發(fā)音為 "lilac") 是.NETCore在非 Windows 平臺(tái)的 MSIL 編譯器 ,基于 ECMA-335 (Common Language Infrastructure) 的標(biāo)準(zhǔn)將 MSIL 編譯成原生碼運(yùn)行,適用于可運(yùn)行 LLVM 的操作系統(tǒng),例如 Mac OSX 與 Linux 操作系統(tǒng)。
LLILC 同時(shí)支持 JIT (內(nèi)含 RyuJIT 的實(shí)現(xiàn)) 以及 AOT (未來(lái)將開始支持) 的編譯方式。
Roslyn
.NETCompiler Platform (項(xiàng)目代碼為 Roslyn) 是將.NET平臺(tái)的編譯架構(gòu)標(biāo)準(zhǔn)化的平臺(tái),它可提供程序管理工具 (如集成開發(fā)環(huán)境) 相當(dāng)多的情報(bào),用以發(fā)展有助于編寫程序與管理程序結(jié)構(gòu)所需要的功能
例如類型信息、語(yǔ)法結(jié)構(gòu)、參考鏈接、語(yǔ)義、編譯器、自動(dòng)化、錯(cuò)誤回報(bào)等等功能,只要是遵循 CLI 標(biāo)準(zhǔn)的編程語(yǔ)言,都可以利用.NETCompiler Platform 實(shí)現(xiàn)出編譯器,讓程序管理工具能實(shí)現(xiàn)如語(yǔ)法提示、語(yǔ)法自動(dòng)完成、關(guān)鍵字高亮等可視化能力。
.NET Compiler Platform 可同時(shí)支持.NET Framework 4.6 以上版本,.NET Core也原生支持。