(17万浏览量) .NET Core的介绍
.NET Core基礎(chǔ)理論
1、.NET Core基礎(chǔ)理論
1.1、重要工具
.NET FlatForm下的項目:https://github.com/dotnet/
查看.NET Core源碼:https://github.com/dotnet/runtime
查看asp.net Core源碼:https://github.com/dotnet/aspnetcore
.Net Core 擴展庫:https://github.com/dotnet/extensions
最重要的是:https://github.com/dotnet/runtime
asp.net Core和.NET Core是兩個相對獨立的技術(shù)棧。asp.net Core并不絕對依賴哪個.NET框架。.NET基金會還沒有決定.NET Core開源的時候,ASP.NET MVC就已經(jīng)開源了。
asp.net Core是一個上層開發(fā)框架,沒有底層框架.NET core。運行時.net core mono。
Mac版的VS前身不是VS,是Xamarin Studio,MonoDevelop衍生來的。
從.NET FrameWork遷移到.NET Core怎么做?
升級.NET Core的版本,哪里不兼容。
.NET遷移分析工具,分析項目的源代碼,并且生成分析報告。
1.2、重要組件
.NET Core并不是一個單獨的開源項目,它是由很多個開源項目構(gòu)成的項目集合。它的核心由四個支柱項目構(gòu)成:Core CLR、CoreFx、CLI、Rolsyn。
(1) Core CLR:它是最核心的部分,是.NET Core的公共語言運行時,由C++編寫實現(xiàn)的。相當于java的JRE。Core CLR是由是由.NET FW的CLR發(fā)展而來的。結(jié)構(gòu)上與CLR是一致的。
Core CLR的組成部分或主要功能:
CLR的第一職責(zé)就是執(zhí)行.NET程序。.NET程序和C或C++這些語言編譯出來的程序由很大區(qū)別。原生程序(包含了特定硬件架構(gòu)的機器碼,調(diào)用特定系統(tǒng)的接口,只能在某一個特定平臺執(zhí)行)。
.NET程序:中間代碼,不依賴平臺,可以不同的平臺運行。
Core CLR解析中間代碼,翻譯成目標平臺的機器碼,生成元數(shù)據(jù)(類型信息、GC信息、異常信息)支持各種機制。
CLR把已經(jīng)編譯過的IL加載到內(nèi)存中的部分是class Loader的部分,翻譯代碼的叫做JIT。
目前代碼的執(zhí)行路徑、操作系統(tǒng)、硬件情況,編譯出最適合當前計算機執(zhí)行的高效的匯編代碼。
JIT是IL(中間語言,MSIL)的編譯器,并不是C#的編譯器。
CLR為了保證類型安全。類型安全指的是.NET程序保證對象類型一定正確。
CLR提供了異常處理機制。傳統(tǒng)的機制使用函數(shù)返回值通知和處理錯誤,實現(xiàn)起來很有難度。這部分也是在CLR中處理的。
線程機制,CLR對原生的線程以及同步對象進行了包裝,所以,在托管平臺上,可以使用相同的方式,在不同的平臺進行多線程處理。
自動內(nèi)存管理,垃圾回收機制(簡稱GC),也在CLR中。在我們分配資源的時候,可以不用理會。
GC會一直關(guān)注內(nèi)存的變化,在適當?shù)臅r候啟動并對內(nèi)存中無效的對象執(zhí)行銷毀操作,進行內(nèi)存的回收和管理。GC只能自動銷毀CLR托管的對象,非托管對象(如,文件句柄),非托管資源都使用了托管代碼包裝,所以,一般情況下可以不用手動處理。而是托管釋放的,封裝過了。。。這就不是GC做的事情。
(2)CoreFx和CoreCLR還是兩個項目,但是合并到了同一個倉庫,是為了方便開發(fā)者。Core FX是.NET Core的基礎(chǔ)類庫,完全由C#語言編寫,是庫函數(shù)項目。如:system.DateTime類型。在.NET 5中,項目的名稱變了,改為Libraries==Core FX。
基礎(chǔ)類庫的作用:減少.NET 開發(fā)人員的工作量;可以讓不同模塊之間的數(shù)據(jù)交互更加容易。
Core FX大多數(shù)代碼都是從.NET FrameWork的BCL里移植過來的。
Core FX為了兼容多個操作系統(tǒng),大量的使用了parial關(guān)鍵字(部分類)。將多平臺公用的代碼放在一個源代碼文件中,具體某個操作系統(tǒng)相關(guān)的代碼放在另一個與平臺相關(guān)的源代碼文件中。
不同的CLR,跨平臺。不同的平臺有不同的CLR。還有Framework、Mono等不同實現(xiàn)。
功能是有差異,又提出了.NET Standard,即.NET標準(.NET Standard不是庫,是標準)。在原有的框架類庫中劃分了一部分最基礎(chǔ)的功能,被不同的CLR實現(xiàn),.NET標準版本越高,要求支持的功能越多。。。
.NET Framework 4.6.1和.NET Core 2.0都支持.NET標準2.0。如果采用.NET 標準2.0的項目,那么可以在.NET Framework 4.6.1和.NET Core 2.0上運行。.NET Framework 4.6.1不支持.NET標準2.0,支持.NET標準1.3。為了兼容.NET標準,.NET開發(fā)團隊在遷移的時候都是按照這來的。
(3) CLI:
CLI有2個。common Language Infrastructure通用中間語言;Command Line Interface命令行接口
通用中間語言是公開的技術(shù)標準,定義了一個不依賴于具體操作系統(tǒng)與硬件架構(gòu)的中間語言,以及執(zhí)行這個語言所需的運行環(huán)境。在C#中,int類型不管是任何平臺永遠是4!
CLI的特性:跨平臺、跨語言。
我們通常不會直接編寫IL,而是先編寫高級語言,再使用工具(Roslyn)轉(zhuǎn)換到中間語言。
中間語言定義的標準里面就是一些定義規(guī)范:int、long、string的模樣,有哪些類型、指令的種類、方法的結(jié)構(gòu)、模塊的結(jié)構(gòu)、二進制文件的格式。。。。
高級語言編譯成中間語言(IL)后,就會公用這種標準。
通用中間語言與.NET Core沒有任何關(guān)系。
Command Line Interface命令行接口 才與.NET Core有關(guān)。以前.Net Framework只支持Windows。Win32 GUI工具不支持linux的文件系統(tǒng),可執(zhí)行文件格式。
.NET Core目標就是跨平臺,需要設(shè)計一款多平臺統(tǒng)一、高效,便于使用的.NET Core工具,很不容易的事情。
CLI是一個獨立的項目。
很有難度的問題:.NET Core編譯生成的二進制,到底是針對不同的操作系統(tǒng)生成不同的文件格式,還是生成統(tǒng)一的文件格式?.NET Core生成統(tǒng)一的文件格式。
.NET Core跨平臺開發(fā),無論是win還是linux,.NET Core編譯出來的二進制文件都是DLL,還都是PE格式。
.NET Core必須提供一個容器,來保證所有操作系統(tǒng)平臺都可以接在PE格式的DLL文件上。
CLI工具是在.NET Core 2.0才固定下來的。
整個CLI項目不同的語言開發(fā)的多個工具組成,后來變成了一個工具dotnet,可以用來項目管理、項目構(gòu)建、代碼運行、包管理。
(4) Rolsyn
它是.NET上的高級語言編譯器。可以編譯C#、VB.NET、F#。
確切的來說,Rolsyn被微軟定義為下一代編譯平臺,而不僅僅是編譯器。
因為除了代碼編譯外,它還提供了代碼分析服務(wù)、豐富的API。
在Rolsyn之前,C#的編譯器是CSC。相對來說,Rolsyn生成的IL更加高效、編譯時間也大大縮短。
從VS2017開始,代碼編譯的時候,Rolsyn提供了動態(tài)編譯功能。類的頭上被幾個引用
C#是由Rolsyn編譯為IL。
以前這4個開源項目都是獨立的倉庫。
1.3、常見問題解析
.NET Core定義:小型的、高效的、可以通過文件復(fù)制直接部署的跨平臺框架。
.NET Core備受大家關(guān)注的原因?
(1) 自身是開源的,鼓勵更多的.NET項目開源。
對于傳統(tǒng)的.NET開發(fā)人員,但也不是什么熟悉的東西。
開源許可協(xié)議、開源協(xié)議。
為了體會到時代的變遷有多大,2000年代初期的時候,微軟的高管們是怎么評價開源的:開源是對知識產(chǎn)權(quán)的嚴重破壞。
現(xiàn)在的微軟把GITHUB收購了,這種變化與.NET基金會有很大的關(guān)系。
.NET基金會是一個獨立的組織,支持.NET社區(qū)和開源,目的是拓寬和加強.NET生態(tài)系統(tǒng)。2014年微軟開頭組建,創(chuàng)始人有6個,但這6個都不是微軟的員工。直到2019年改選,才有了一名微軟的員工。其余的都是MVP以及其他的很多知名公司(如亞馬遜、谷歌、三星)。
.NET Core的源碼以及.NET Core周邊的一些開源項目,都是這個基金會的重要資產(chǎn)。
開源項目基本上遵循MIT許可協(xié)議,才讓.NET Core有極大的開放性和移植性。
當前主流的四種軟件許可協(xié)議:GPL、Apache、BSD、MIT。
這些協(xié)議的目的:為了保護和尊重作者的知識產(chǎn)權(quán),即便是開源,也不是說明源代碼可以隨意使用!!
GPL協(xié)議:對開源軟件的使用限制最嚴格,而且具有極高的傳染性。核心思想:讓全世界上的軟件都開源!如果你的軟件,用了甚至是它的衍生,也必須用GPL協(xié)議。這對商業(yè)軟件構(gòu)成了很大的挑戰(zhàn)。因為這個核心思想,發(fā)展的并不好。從而出現(xiàn)了一個變體LGPL。如果商業(yè)軟件僅僅是引用LGPL許可協(xié)議下的軟件,那么無須開源,但是如果對LGPL下的源代碼進行了修改,那么就必須開源。曾經(jīng)中國發(fā)生的一件侵權(quán)的事件,安卓TV版的軟件。其他的開發(fā)者偶然發(fā)現(xiàn),告訴了被引用的原作者。
Apache協(xié)議:是Apache基金會創(chuàng)立的。廣泛了存在于Apache的軟件中。該協(xié)議鼓勵開源軟件的使用者充分尊重軟件的原作者。如果用了Apache協(xié)議,僅需注明你用了以及作者信息。如果你對Apache西醫(yī)的項目有了修改,發(fā)布時,對你繼續(xù)進行的修改說明。他不強制要求開源。
BSD和MIT是最寬松的協(xié)議,鼓勵開發(fā)者自由的使用、自由的修改、自由的發(fā)布。二者區(qū)別:BSD額外規(guī)定如果你對BSD下的軟件源碼進行了修改再發(fā)布,那么你不能借用該項目原作者的名義進行宣傳。
.NET Core全系列的開源項目都采用MIT協(xié)議。它可以被無限制的修改、移植、打包、發(fā)布。這才是.NET Core的最大驅(qū)動力。
(2)跨平臺
(3)性能高效。比.NET Framework更加優(yōu)秀,也比其他同級開源框架高效。
總結(jié)
以上是生活随笔為你收集整理的(17万浏览量) .NET Core的介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 4行代码AC——L1-038 新世界 (
- 下一篇: voting设计模式