• .Net Core 是.Net的未来,微软在19年 5月已经明确说明,未来只有.Net 5(=.NET Core vNext),.Net 5是.net core的下一个版本,你可以用它来开发Windows,Linux,MacOs,IOS,Android等等应用。
    avatar

    图片来源

  • 在容器、k8s、Devops、微服务等技术的推动下,2020年云原生将势不可挡,.net Cor而设计之初就了适配云原生,它有很多优点,都说明它是云原生时代,是一个很好的选择。
  • 它体积更小,启动速度更快、占用资源更少、支持水平扩展
  • 考虑自己的职业发展,.net core也是必须需要熟悉的

  • 开源通用的开发框架 github地址,微软和社区共同维护
  • .net core 模块化管理,按需引用对应组件
  • 支持跨平台、跨架构开发,部署灵活
  • 兼容性强
  • 支持命令行
  • 包含了.Net Framework的类库 (3.0版本之前很多都是从.Net Framework类库移植的,现在已经不再移植老的代码 )

推荐一篇讲的很好的文章,这里就不展开了传送门

  • 同父异母的兄弟关系
  • .Net core可以认为是.net Framework的下一代产品,到2020后都统一为.Net 5
    .Net Schedule
  • .net core 3.1 2019年12月正式发布 LTS 可以商用
  • 兼容winform和WPF,这部分目前不跨平台、
  • 体积更小,启动速度更快,占用资源更少,支持水平扩展,更好适配云原生和微服务
  • Blazor
  • GRPC

启动过程

通过上图大概可以把启动过程总结为:

创建主机生成器-配置主机->创建主机->运行主机

applicarion

主机主要负责应用程序的启动和生命周期的管理,配置服务器和请求处理管道,实质是一个封装了应用资源的object
配置日志、依赖服务的注入

.Net core 中的主机分为泛型主机web主机

Kestrel 是 ASP.NET Core 项目模板指定的默认 Web 服务器。是一个跨平台的高性能的WEB服务器,角色定位类似于IIS,但不是IIS,它在linux下性能更强,相比于IIS它功能相对较少,不支持反向代理。
Kestrel

这里说的配置,主要分为两种:

  • 主机配置
  • 服务配置。

下面我们以实际代码来看下,怎么新增和修改默认的启动配置

  1. public class Program
  2. {
  3. public static void Main(string[] args)
  4. {
  5. CreateHostBuilder(args).Build().Run();
  6. }
  7. public static IHostBuilder CreateHostBuilder(string[] args) =>
  8. Host.CreateDefaultBuilder(args)
  9. .ConfigureWebHostDefaults(webBuilder =>
  10. {
  11. webBuilder.UseStartup<Startup>();
  12. });
  13. }

这个是我们通过vs生成的一个最简单的.net core 3.1空的模板项目。Host.CreateDefaultBuilder()这个方法默认会加载命令行参数, 加载配置 应用配置(appsettings.json)``加载环境变量,加载日志组件等默认配置。

看到这些大家可能会疑问,如果环境配型、应用配置、命令行中有相同的配置,应用会以那个配置的优先级生效呢,下面我们以最简单启动urls参数为例,验证下,这些配置的优先级。

.net core 中提供了三种设置urls的方法

  • 环境变量, 在 launchSettings.jsonenvironmentVariables增加ASPNETCORE_URLS来设置urls
  1. {
  2. "profiles": {
  3. "CoreStudyLesson1": {
  4. "commandName": "Project",
  5. "launchBrowser": true,
  6. "environmentVariables": {
  7. "ASPNETCORE_ENVIRONMENT": "Development",
  8. "ASPNETCORE_URLS": "http://*:7000"
  9. },
  10. "applicationUrl": "http://localhost:5000"
  11. }
  12. }
  13. }

运行效果
dotnet_run_3

  • 应用配置。修改appsettings.json,增加urls节点
  1. {
  2. "Logging": {
  3. "LogLevel": {
  4. "Default": "Information",
  5. "Microsoft": "Warning",
  6. "Microsoft.Hosting.Lifetime": "Information"
  7. }
  8. },
  9. "AllowedHosts": "*",
  10. "urls":"http://*:8000"
  11. }

运行效果
dotnet_run_4

  • 命令行启动, 使用 --urls 参数指定url
  1. dotnet run --urls https://*:9000

运行效果
dotnet_run_2

  • 代码指定
  1. public class Program
  2. {
  3. public static void Main(string[] args)
  4. {
  5. CreateHostBuilder(args).Build().Run();
  6. }
  7. public static IHostBuilder CreateHostBuilder(string[] args) =>
  8. Host.CreateDefaultBuilder(args)
  9. .ConfigureWebHostDefaults(webBuilder =>
  10. {
  11. webBuilder.UseStartup<Startup>();
  12. // 设置监听Url 命令行 硬编码 应用配置 环境变量
  13. webBuilder.UseUrls("http://*:6001");
  14. });
  15. }

运行效果
dotnet_run_5

具体优先级是

命令行 >应用配置>硬编码>环境变量

  1. public class Program
  2. {
  3. public static void Main(string[] args)
  4. {
  5. CreateHostBuilder(args).Build().Run();
  6. }
  7. public static IHostBuilder CreateHostBuilder(string[] args) =>
  8. Host.CreateDefaultBuilder(args)
  9. // 配置web主机 kestrel
  10. .ConfigureWebHostDefaults(webBuilder =>
  11. {
  12. //组件配置
  13. webBuilder.ConfigureKestrel((context,options)=>
  14. options.Limits.MaxConcurrentConnections=10);//默认没有限制
  15. // 主机配置项
  16. webBuilder.UseStartup<Startup>();
  17. });
  18. }

移除默认的日志组件,并添加制定的logProvider.

  1. public class Program
  2. {
  3. public static void Main(string[] args)
  4. {
  5. CreateHostBuilder(args).Build().Run();
  6. }
  7. public static IHostBuilder CreateHostBuilder(string[] args) =>
  8. Host.CreateDefaultBuilder(args)
  9. // 配置web主机 kestrel
  10. .ConfigureWebHostDefaults(webBuilder =>
  11. {
  12. //组件配置
  13. webBuilder.ConfigureKestrel((context,options)=>
  14. options.Limits.MaxConcurrentConnections=10);//默认没有限制
  15. webBuilder.ConfigureLogging(logging =>
  16. {
  17. logging.ClearProviders();// 移除.net Core默认注入的日志Providers
  18. logging.AddLog4Net();//所有日志统一使用log4net
  19. });
  20. // 主机配置项
  21. webBuilder.UseStartup<Startup>();
  22. });
  23. }
  1. // 主机配置项
  2. webBuilder.UseStartup<Startup>();

版权声明:本文为sagecheng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/sagecheng/p/12274959.html