.NET Core 學習資料精選:入門


 

    開源跨平台的.NET Core,還沒上車的趕緊的,來不及解釋了……

    本系列文章,主要分享一些.NET Core比較優秀的社區資料和微軟官方資料。我進行了知識點歸類,讓大家可以更清晰的學習.NET Core

首先感謝資料原作者的貢獻。

第一篇:.NET Core 學習資料精選:入門

    介紹.NET歷史、開源之路、基礎、路由、依賴注入DI、HttpContextcookie|sessionHttpClientgRPC、單元測試、發布部署等等。

第二篇:.NET Core 學習資料精選:進階

    介紹.NET工程化、AOP、異常處理、緩存、日志、響應優化、上傳下載、健康檢查、后台任務、認證和授權、安全性(HttpsCORSCSRF)、EF Core 等等

第三篇:.NET Core 學習資料精選:高級&微服務架構

    介紹性能、原理、微服務架構、Docker、DDD等知識

 

這是第一篇,知識點如圖:

           

 

.NET 簡介

#.NET 開源之路

clip_image004[8]

.NET 時間軸

.NetFrameWork發展史

C# 語言版本發展史

.NET 生態系統概覽(開源&跨平台)

2014.11月 .NET Core 項目啟動,2016.06月 .NET Core 1.0 發布

.NET Core 3.0 新特性:支持 Windows 桌面應用(windows only)

image

.NET Core 3.0 正式公布:新特性詳細解讀

.NET Core 3.0 下一個版本命名為:.NET 5

【翻譯】.NET Core3.1發布(及各版本支持時長)

clip_image006[8]

.NET Core Roadmap

image

[翻譯] .NET 官宣跨平台 UI 框架 MAUI (.NET 6)

 

#.NET Core提供的特性

1.免費和最寬松的開源協議

.NET Core從屬於.NET基金會,由微軟進行官方支持。使用最寬松的MIT和Apache 2開源協議,文檔協議遵循CC-BY。這將允許任何人任何組織和企業任意處置,包括使用,復制,修改,合並,發表,分發,再授權,或者銷售。唯一的限制是,軟件中必須包含上述版權和許可提示,后者協議將會除了為用戶提供版權許可之外,還有專利許可,並且授權是免費,無排他性的(任何個人和企業都能獲得授權)並且永久不可撤銷,用戶使用.NET Core完全不用擔心收費問題,你可以很自由的部署在任何地方.

2.輕量級、跨平台

3.組件化、模塊化、IOC+Nuget、中間件

4.高性能

5.統一了MVCWebAPI編程模型

a)  比如:ASP.NET Core MVC Web API 直接或間接繼承同一個基類 ControllerBase,提供可使用的API也一致化

b)  比如:舊ASP.NET時代,寫全局filter需要針對MVC Web API 分別編寫代碼,但在ASP.NET Core,直接使用一套中間件代碼即可

6.可測試性

7.微服務、容器化支持

8.標准化 .NET API 規范- .NET STANDARD

 

#、遷移到.NET Core

目前市面上還存在很多傳統 .NET 舊項目,我們需要根據公司情況決定是否升級到.NET Core

如果需要進行舊項目升級的,可以參考文章:《.NET項目遷移到.NET Core操作指南

 

VS.NET Core安裝

Vistual Studio

  VS2019安裝教學

  VS2019正式版注冊碼秘鑰

  Visual Studio 中使用Libman管理客戶端庫

  [坑]安裝 .Net Core 2.2 SDK后,VS2017依然不能設置core2.2為目標框架

  把.net Core 項目遷移到VS2019 for MAC(無需改一行代碼)

調試

  VS2019自帶 反編譯 與 Reflector 反編譯工具比較

  使用dnSpy調試asp.net core源碼

  Visual Studio 2017中使用SourceLink調試Nuget包源碼(SourceLink方式)

  Visual Studio 2017調試開源項目代碼(下載源代碼文件方式)

VS Code 開發.NET Core

  使用VS Code 開發.NET CORE 程序指南

  完整構建VSCode開發調試環境

.NET Core SDK

安裝 .NET Core Runtime 和.NET Core SDK

如何為.NETCore安裝漢化包智能感知

Linux/MacOS 安裝 .NET Core SDK 命令

.NET Core 卸載工具 (dotnet-core-uninstall) 

修改nuget包默認存放路徑,避免C盤膨脹

【微軟官方文檔】ASP.NET Core *.* 個版本新特性

指定要使用的 .NET Core 版本

如何刪除 .NET Core 過時的運行時和 SDK

 

基礎

術語:

  程序員需要知道的縮寫和專業名詞

  后端開發術語大全

  一文讀懂QPS、TPS、PV、UV、GMV、IP、RPS

ASP.NET Core開發者路線指南

微軟官方 asp.net core 教程文檔(入口)

.NET Core 命令行接口 (CLI) 工具

  使用cmd命令行(.NET Core CLI)來啟動ASP.NET Core 應用程序的多個實例

.NET Core應用的三種部署方式

.NET Core RID 目錄 (參數:-r|--runtime)

.NET Core 目標框架 (參數:-f|--framework

  dotnet publish 發布的文件中包含pdb文件,不論模式是Debug還是Release。可以通過配置:

     <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
          <DebugType>None</DebugType>
          <DebugSymbols>false</DebugSymbols>
          ……
     </PropertyGroup>

--self-contained 自包含參數。將.NET Core運行時及.NET Core類庫隨應用一起打包,這樣可以完全避免老項目在系統.NET Core運行時升級時,帶來莫名異常的問題

.NET Core 運行程序注意事項(dotnet dll 與 dotnet run)

core api 支持情況

ASP.NET Core API 一覽表

查詢 NET API 及類庫在各版本中實現情況

ASP.NET Core 項目目錄結構介紹

ASP.NET Core 端口配置

  NetCore 啟動地址配置詳解

  Asp.Net Core WebAPI 端口修改(host.json)

  Net Core3.0配置項目端口號

ASP.NET Core 中的Startup類

[視頻]基於Webhost分析netcore啟動原理

ASP.NET Core 中使用多個環境(開發、預發布、生產)- 默認為 Production

ASP.NET Core 返回類型ActionResult|ActionResult<T>|Dto

  ASP.NET Core 動作結果(ActionResult)

  ASP.NET Core 中控制器操作的多路徑返回類型(IActionResult)

  ASP.NET Core中的Action的返回值類型

.NET Core 3.0 新的 System.Text.Json API

 

配置

ASP.NET Core 中的配置(json、xml、命令行、環境變量、內存變量等)

ASP.NET Core 中的選項模式

ASP.NET Core 中IOptions、IOptionsMonitor以及IOptionsSnapshot

ASP.NET Core 為選項數據添加驗證

.Net Core 自定義配置源從遠程API讀取配置(ConfigurationProvider)

邁向現代化的 .Net 配置指北(配置到類自動映射)

 

路由、模型綁定

ASP.NET Core WebAPI中,Controller標注 [ApiController] 特性,其路由只能使用[route]特性方式

ASP.NET Core MVC 構建可讀性更高的ASP.NET Core 路由

ASP.NET Core 3.x 為什么采用新的 Endpoint Routing 路由系統

ASP.NET Core 3.0中使用動態控制器路由

ASP.NET Core 中的模型綁定

ASP.NET Core 中的自定義模型綁定(IModelBinder)

ASP.NET Core 中的 URL 重寫中間件

ASP.NET Core API默認支持的InputFormatters:application/json-patch+json、application/json、text/json、application/*+json

ASP.NET Core API默認支持的OutputFormatters:text/plain、application/json、text/json、application/*+json

ASP.NET Core Web API 入參解析InputFormatter

ASP.NET Core Web API 對輸入流stream的支持

ASP.Net Core Web Api中異步視頻流的IOutputFormatter

 

控制反轉、依賴注入

什么是控制反轉,和依賴注入:

     依賴倒置原則(Dependence inversion principle,DIP):軟件設計原則,要依賴於抽象,不要依賴具體實現。

控制反轉(Inversion of Control,IoC):IOC是一種實現DIP原則的模式。平常我們需要一個類對象的時候需要new出來,而現在我們把new一個類對象的工作交給了IOC容器,當我們需要一個類對象的時候直接向IOC容器要,就可以了,這個就是控制反轉。(控制權交個了IOC容器)

依賴注入(Dependency Injection,DI):DI是實現IOC的一種方式。當我需要一個類對象,IOC容器給我們這個類對象的過程其實就是依賴注入,依賴注入有構造函數注入和屬性注入。

[官方]ASP.NET Core 依賴注入

全面理解 ASP.NET Core 依賴注入

官方推薦通過構造函數。這也是所謂的顯式依賴。Asp.Net Core 的標准依賴注入容器不支持屬性注入。(可以使用autofac或者其他來實現屬性注入)

ASP.NET Core 中依賴注入的N種玩法

ASP.NET Core 自定義特性實現屬性注入

ASP.NET Core 原生DI實現批量注冊

可以參考 OSharp 框架,設計三個全局注入接口,來實現自動化注入ISingletonDependency ITransientDependency IScopedDependency ( 單例、瞬時、范圍)。

ASP.NET Core 中如何注入同一個接口的多個實現

案例1:使用nlog時,想根據需要使用不同的配置文件Nlog.config 寫日志時,就可以使用文章中介紹的 Factory 命名注入方案來實現

案例2:使用分布式緩存 IDistributedCache 時,想根據需要在一個項目中同時使用redissqlserver

ASP.NET Core 中多個接口對應同一個實現的正確姿勢

ASP.NET Core 依賴注入擴展庫 Scrutor

[OSharp]使用 IServiceProvider.GetService<T>() 實現按需注入,優化性能

在WPF中使用.NET Core 3.0依賴項注入和服務提供程序

 

#ASP.NET Core 結合 Autofac 的使用

AutoFac三種注入方式:按類型、按名稱、按鍵

Asp.Net Core 2.0 之旅---AutoFacIOC容器的使用教程(批量注入)

Asp.Net Core 2.0 之旅---AutoFac倉儲泛型的依賴注入(泛型注入)

Asp.Net Core 2.0 之旅---數據訪問倉儲模式的事務管理(uow+rp)

ASP.NET Core 技巧之偽屬性注入(屬性注入會造成類型的依賴關系隱藏,測試不友好等)

 

ASP.NET Core 中使用Autofac實現屬性注入的代碼片段

public IServiceProvider ConfigureServices(IServiceCollection services)
{
    // 第一步:替換系統默認Controller創建器(否則Controller下面無法使用屬性注入)
    // 在 services.AddMvc() 之前
    services.Replace(ServiceDescriptor.Transient<IControllerActivator, ServiceBasedControllerActivator>());
    services.AddMvc();

    var builder = new ContainerBuilder();

    // 第二步:找到所有Controller的類型
    // 通過Autofac對Controller類型進行屬性注冊 PropertiesAutowired()
    var assembly = this.GetType().GetTypeInfo().Assembly;
    var manager = new ApplicationPartManager();
    manager.ApplicationParts.Add(new AssemblyPart(assembly));
    manager.FeatureProviders.Add(new ControllerFeatureProvider());
    var feature = new ControllerFeature();
    manager.PopulateFeature(feature);
    builder.RegisterTypes(feature.Controllers.Select(ti => ti.AsType()).ToArray()).PropertiesAutowired();
    // 第三步:配置 ContainerBuilder,返回 IServiceProvider 
    builder.Populate(services);
    return new AutofacServiceProvider(builder.Build());
}

 

#、構造函數注入&屬性注入

描述來源於Abp.io中文文檔:查看詳情

構造方法注入

        是將依賴項注入類的首選方式.這樣,除非提供了所有構造方法注入的依賴項,否則無法構造類.因此,該類明確的聲明了它必需的服務.

屬性注入

        public class MyService : ITransientDependency
        {
                public ILogger<MyService> Logger { get; set; }

                public MyService()
                {
                        Logger = NullLogger<MyService>.Instance;
                }

        }

對於屬性注入依賴項,使用公開的setter聲明公共屬性.這允許DI框架在創建類之后設置它.
屬性注入依賴項通常被視為可選依賴項.這意味着沒有它們,服務也可以正常工作.Logger就是這樣的依賴項,MyService可以繼續工作而無需日志記錄.
為了使依賴項成為可選的,我們通常會為依賴項設置默認/后備(fallback)值.在此示例中,NullLogger用作后備.因此,如果DI框架或你在創建MyService后未設置Logger屬性,則MyService依然可以工作但不寫日志.
屬性注入的一個限制是你不能在構造函數中使用依賴項,因為它是在對象構造之后設置的.
當你想要設計一個默認注入了一些公共服務的基類時,屬性注入也很有用.如果你打算使用構造方法注入,那么所有派生類也應該將依賴的服務注入到它們自己的構造方法中,這使得開發更加困難.但是,對於非可選服務使用屬性注入要非常小心,因為它使得類的要求難以清楚地看到.

 

ASP.NET Core WebAPI

創建ASP.NET Core Web API (ControllerBase、參數綁定源)

版本控制

RESTful API版本控制策略

ASP.Net Core WebAPI 幾種版本控制對比(nuget:Microsoft.AspNetCore.Mvc.Versioning)

ASP.NET Core 構建帶有版本控制的 API 接口(結合SwaggerUI)

使用 ASP.NET Core WebAPI 小技巧

使用 Web API 約定

使用 Web API 分析器告警缺失的約定

WebApi管理和性能測試工具WebApiBenchmarks

ASP.NET Core AutoWrapper 自定義響應輸出

 

ASP.NET CoreMVC Razor Pages

ASP.NET Core MVC 靜態文件目錄配置與訪問授權

ASP.NET Core 十種方式擴展你的 Views

ASP.NET Core 中的特殊視圖文件(_Layout.cshtml、_ViewStart.cshtml、_ViewImports.cshtml)

新的 Razor 機制

ASP.NET Core Razor SDK

ASP.NET Core 的 Razor 語法參考

ASP.NET Core 中的 Razor 頁面介紹(OnGet、OnPost、單頁多Handler方式)

ASP.NET Core 中 Razor 頁面的IPageFilter

ASP.NET Core 中 Razor 頁面的路由和應用約定

ASP.NET Core Razor 配置:預編譯,動態編譯,混合編譯

WebForm & MVC & Razor Pages

[譯]ASP.NET:WebForms vs MVC

ASP.NET Core Razor頁面 vs MVC

[譯]ASP.Net Core 2.0中的Razor Page不是WebForm

ASP.NET Core Razor頁面簡化了 ASP.NET MVC 應用程序

 

HttpContext

ASP.NET Core 中訪問 HttpContext 的方法

ASP.NET Core 中通過IHttpContextAccessor實現公用靜態HttpContext

 

狀態管理

常見方式:CookieSessionTempData、查詢字符串、HttpContext.Items、緩存、依賴關系注入

ASP.NET Core 中的會話和應用狀態

Cookie 的 SameSite 屬性(注意http>>https重定向跨域導致的cookie丟失問題)

#session

ASP.NET Core 在通用數據保護條例規則下使用 session

ASP.NET Core 使用Redis存儲Session

#cookie

ASP.NET Core SameSite 設置引起 Cookie 在 QQ 瀏覽器中不起作用

[github]ASP.NET Core CookieManager

 

通信

對比 gRPC 服務和 HTTP API 服務

.NET Core 基於Websocket的在線聊天室

#HttpClient

傳統.NET HttpClient坑

ASP.NET Core HttpClient的演進和避坑

C#中HttpClient使用注意:靜態化、預熱和長連接

ASP.NET Core HttpClient的各種用法、生命周期管理

DotNetCore 使用Http請求及基於 Polly 的處理故障

DotNetCore 中 HttpClientFactory 類源碼分析

#RPC

  Grpc

       [github]google protobuf

       Protobuf3語法詳解

       C# protobuf3的序列化和反序列化

       protocol buffer的命令protoc整理

       ASP.NET Core 3.0 使用gRPC

       ASP.NET Core 3.0 gRPC 雙向流

       使用 ASP.NET Core 的 gRPC 服務

       [netcore]GRpc添加客戶端的五種方式

       .NET Core 中的 gRPC 客戶端工廠集成(依賴注入)

       兩個gRPC的C#庫:grpc-dotnet vs Grpc.Core

       Grpc調試:AspNetCore.Grpc.Swagger 由微軟提供(.NET5.0版本)--(github issue

       支持使用Restful API方式調用Grpc方法:GrpcJsonTranscoder

       [github]基於gRPC的實時網絡引擎:MagicOnion       

  DotNetty

       [github]Azure開源的網絡通信框架DotNetty

#、SignalR

ASP.NET Core SignalR 簡介

[如鵬網九節公開課].NET Core 中使用SignalR實現聊天服務器

SignalR 在5分鍾內完成通信連接和消息發送

SignalR 中豐富多彩的消息推送方式

在后台主機中托管SignalR服務並廣播心跳包

 

發布部署

nginx 之 https 證書配置

asp.net core 只有發布之后才能在IIS上部署訪問(而asp.net 程序 是可以直接指定到源代碼目錄訪問)

.Net Core 跨平台:一個簡單程序的多平台(windows、Linux、osx)發布

ASP.NET Core 使用 IIS 進行托管部署

ASP.NET Core 部署到 Linux 進行托管

在Linux上使用 pm2 守護你的 .NET Core 應用程序--(pm2 github starts 31.1k)

在Linux上使用Nginx + supervisor部署ASP.NET Core程序--(supervisor github starts 5.8k)

ASP.NET Core 使用Docker進行容器化托管

配置 ASP.NET Core 以使用代理服務器和負載均衡器

  使用 Nginx 在 Linux 上托管 ASP.NET Core

  使用 Apache 在 Linux 上托管 ASP.NET Core

ASP.NET Core nginx反向代理部署

 

單元測試

.NET Core 和 .NET Standard 單元測試最佳做法

.NET 測試篇之Moq框架簡單使用

使用 dotnet test 和 xUnit 在 .NET Core 中進行 C# 單元測試

使用 dotnet test 和 NUnit 在 .NET Core 中進行 C# 單元測試

使用 dotnet test 和 MSTest 在 .NET Core 中進行 C# 單元測試

使用 dotnet test --filter 進行選擇性單元測試

 

視頻教程

ASP.NET Core MVC 2.x 全面教程 -- solenovex

ASP.NET Core 3.0 入門視頻 -- solenovex

NetCore 視頻教程(Blog.Core)--- 老張

 

一些坑

dotnet core windows和linux的時區處理  (開源庫:nodatime)

 

其他資料推薦

大量 Blazor 學習資源(一)

 

 

==============================================================================

over,謝謝查閱,覺得文章對你有收獲,請多幫推薦。歡迎向我提供更好的資料信息。

  

        


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM