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