这段时间,会陆续把去年一年在公司作的相关培训,整理成博客分享给你们,在团队内部已经把大部分的.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>();