很早就想寫.net core相關教程內容了,但是一方面感覺東西太多了,一方面是太懶了,最近才下定決心,一定要寫點東西出來,希望能支持一下國內.net 的尷尬處境
好了,先從.net core開源開始吧,以后會對一些獨立模塊單獨剖析介紹,比如認證授權,配置,日志等等:
.net core獨立模塊源碼:https://github.com/aspnet
.net core全家桶源碼:https://github.com/dotnet/aspnetcore
.net core拓展庫源碼:https://github.com/dotnet/extensions
.net core標准庫源碼:https://github.com/dotnet/corefx
.net core的EFCore源碼:https://github.com/dotnet/efcore
.net core的SDK源碼:https://github.com/dotnet/sdk
.net core的runtime源碼:https://github.com/dotnet/runtime
.net core獨立模塊
在.net core的初期,每個模塊源碼是獨立開的,每個模塊是一個git倉庫,比如常見的:
Routing 路由模塊源碼:https://github.com/aspnet/Routing
Security 認證授權模塊源碼:https://github.com/aspnet/Security
MVC 模塊源碼:https://github.com/aspnet/Mvc
Configuration 配置模塊源碼:https://github.com/aspnet/Configuration
Options 模塊源碼:https://github.com/aspnet/Options
DependencyInjection 依賴注入模塊源碼:https://github.com/aspnet/DependencyInjection
Hosting 模塊源碼:https://github.com/aspnet/Hosting
這些模塊可以在上面的地址(https://github.com/aspnet)中去查詢,還有很多。
注意,雖然這些庫還是放開的,但是已經不再更新了,他們已經全部被移到.net core全家桶里面去了,所以他們最多只能看作是.net core 2.x的版本
.net core全家桶
可能后來.net core的開發者們覺得每個模塊一個倉庫很麻煩,於是將常用的模塊做成全家桶放到一個git倉庫中去了,這就是.net core全家桶。
注意.net core全家桶里面包含的內容是常用,可以認為是常用的 Microsoft.AspNetCore.XXXXX 的這些空間庫的集合,這些庫主要是做web等服務端開發需要的核心模塊,如Hosting,MVC,Http等模塊。
.net core拓展庫
全家桶包含了一些常用的web等服務端開發庫,那剩下像 Configuration,Options,的常用模塊合在一起就組成了拓展庫!
需要注意的是,這些模塊一般都是一些輔助型的模塊,不是非需不可的存在,但是往往很便捷開發,可以認為這里面的都是 Microsoft.Extensions.XXXXXX的空間庫。
.net core標准庫
這個很好理解,其實就是我們的諸如 System.XXXX 等這些空間庫的集合,比如我們的最常用的方法 String.IsNullOrEmpty()方法的地址在:https://github.com/dotnet/corefx/blob/v3.1.9/src/Common/src/CoreLib/System/String.cs#LC448
[NonVersionable] public static bool IsNullOrEmpty([NotNullWhen(false)] string? value) { // Using 0u >= (uint)value.Length rather than // value.Length == 0 as it will elide the bounds check to // the first char: value[0] if that is performed following the test // for the same test cost. // Ternary operator returning true/false prevents redundant asm generation: // https://github.com/dotnet/coreclr/issues/914 return (value == null || 0u >= (uint)value.Length) ? true : false; }
其實,很多開發者都沒有注意,在使用web開發時,在項目下的依賴項下面的框架中有兩個框架:Microsoft.AspNetCore.App 和 Microsoft.NETCore.App
Microsoft.AspNetCore.App:這里是全家桶和拓展庫中web開發主要和常用的庫集合,注意,它並不包含全家桶和拓展庫中的所有庫,而且常用的一些庫!
Microsoft.NETCore.App:這個其實基本上可以認為是.net core的標准庫了。
EntityFrameworkCore
這個其實EntityFramework在.net core下的實現,因為並不是所有的項目都需要數據庫,因此它被獨立出來作為一個第三方的庫。
附1:項目都是在github上,但是外網速度很慢,直接使用pull或者download可能會失敗,一般多試幾次就可以了,實在不行或者嫌太慢,可以使用gitee進行現有倉庫導入,然后從gitee上進行拉取
方法:登錄gitee => 新建倉庫 => 點擊最下面的【導入已有倉庫】=> 然后輸入github上的倉庫地址,如下圖
附2:代碼弄下來之后,使用VS打開(建議使用VS2019)后十之八九一堆的報錯,重新生成也不頂用,這往往是因為項目引用了外部項目導致的,所以倉庫的作者一般會提供腳本(sh,bat,cmd等)來統一還原生成項目。
比如.net core全家桶中,倉庫中有 restore.cmd (restore.sh)文件,就是用於還原項目用的,它會下載一些插件工具之后統一還原生成整個解決方法,不過因為網絡等原因,99%的可能是不會成功的,所以就將就着使用 ctrl + F 看吧。