這段時間,會陸續把去年一年在公司作的相關培訓,整理成博客分享給你們,在團隊內部已經把大部分的.net項目容器化並部署到k8s,中間也踩了不少坑,也會把相關問題整理處理,你們一塊兒學習交流,哈。html
.Net Core 是.Net的將來,微軟在19年 5月已經明確說明,將來只有.Net 5(=.NET Core vNext),.Net 5是.net core的下一個版本,你能夠用它來開發Windows
,Linux
,MacOs
,IOS
,Android
等等應用。
linux
圖片來源git
考慮本身的職業發展,.net core也是必須須要熟悉的程序員
.Net Framework
的類庫 (3.0版本以前不少都是從.Net Framework類庫移植的,如今已經再也不移植老的代碼 )推薦一篇講的很好的文章,這裏就不展開了傳送門github
經過上圖大概能夠把啓動過程總結爲:web
建立主機生成器-配置主機->建立主機->運行主機json
主機主要負責應用程序的啓動和生命週期的管理,配置服務器和請求處理管道,實質是一個封裝了應用資源的
object
配置日誌、依賴服務的注入c#
.Net core 中的主機分爲泛型主機和 web主機服務器
Kestrel 是 ASP.NET Core 項目模板指定的默認 Web 服務器。是一個跨平臺的高性能的WEB服務器,角色定位相似於IIS,但不是IIS,它在linux下性能更強,相比於IIS它功能相對較少,不支持反向代理。
架構
這裏說的配置,主要分爲兩種:
下面咱們以實際代碼來看下,怎麼新增和修改默認的啓動配置
public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); }
這個是咱們經過vs生成的一個最簡單的.net core 3.1空的模板項目。Host.CreateDefaultBuilder()
這個方法默認會加載命令行參數
, 加載配置
應用配置(appsettings.json)``加載環境變量
,加載日誌組件
等默認配置。
看到這些你們可能會疑問,若是環境配型、應用配置、命令行中有相同的配置,應用會以那個配置的優先級生效呢,下面咱們以最簡單啓動urls參數爲例,驗證下,這些配置的優先級。
.net core 中提供了三種設置urls的方法
launchSettings.json
的 environmentVariables
增長ASPNETCORE_URLS
來設置urls{ "profiles": { "CoreStudyLesson1": { "commandName": "Project", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development", "ASPNETCORE_URLS": "http://*:7000" }, "applicationUrl": "http://localhost:5000" } } }
運行效果
appsettings.json
,增長urls
節點{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*", "urls":"http://*:8000" }
運行效果
--urls
參數指定urldotnet run --urls https://*:9000
運行效果
public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); // 設置監聽Url 命令行 硬編碼 應用配置 環境變量 webBuilder.UseUrls("http://*:6001"); }); }
運行效果
具體優先級是
命令行 >應用配置>硬編碼>環境變量
public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) // 配置web主機 kestrel .ConfigureWebHostDefaults(webBuilder => { //組件配置 webBuilder.ConfigureKestrel((context,options)=> options.Limits.MaxConcurrentConnections=10);//默認沒有限制 // 主機配置項 webBuilder.UseStartup<Startup>(); }); }
移除默認的日誌組件,並添加制定的logProvider.
public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) // 配置web主機 kestrel .ConfigureWebHostDefaults(webBuilder => { //組件配置 webBuilder.ConfigureKestrel((context,options)=> options.Limits.MaxConcurrentConnections=10);//默認沒有限制 webBuilder.ConfigureLogging(logging => { logging.ClearProviders();// 移除.net Core默認注入的日誌Providers logging.AddLog4Net();//全部日誌統一使用log4net }); // 主機配置項 webBuilder.UseStartup<Startup>(); }); }
// 主機配置項 webBuilder.UseStartup<Startup>();