.Net Core初识以及启动配置
更新计划
这段时间,会陆续把去年一年在公司做的相关培训,整理成博客分享给大家,在团队内部已经把大部分的.net项目容器化并部署到k8s,中间也踩了很多坑,也会把相关问题整理处理,大家一起学习交流,哈。
- .Net Core初识以及启动配置
 - .Net Core依赖注入、服务注册
 - .Net Core中间件、应用配置
 - .Net Core日志路由
 - .Net Core实际开发中常用组件
 - .Net Core应用部署
 
.net程序员为什么要学习.net core
- .Net Core 是.Net的未来,微软在19年 5月已经明确说明,未来只有.Net 5(=.NET Core vNext),.Net 5是.net core的下一个版本,你可以用它来开发
Windows,Linux,MacOs,IOS,Android等等应用。

 
- 在容器、k8s、Devops、微服务等技术的推动下,2020年云原生将势不可挡,.net Cor而设计之初就了适配云原生,它有很多优点,都说明它是云原生时代,是一个很好的选择。
 - 它体积更小,启动速度更快、占用资源更少、支持水平扩展
 - 考虑自己的职业发展,.net core也是必须需要熟悉的
 
什么是.Net Core
- 开源通用的开发框架 github地址,微软和社区共同维护
 - .net core 模块化管理,按需引用对应组件
 - 支持跨平台、跨架构开发,部署灵活
 - 兼容性强
 - 支持命令行
 - 包含了
.Net Framework的类库 (3.0版本之前很多都是从.Net Framework类库移植的,现在已经不再移植老的代码 ) 
.Net Core和.Net Framework的区别
推荐一篇讲的很好的文章,这里就不展开了传送门
- 同父异母的兄弟关系
 - .Net core可以认为是.net Framework的下一代产品,到2020后都统一为.Net 5

 
.Net Core 3.1
- .net core 3.1 2019年12月正式发布 LTS 可以商用
 - 兼容winform和WPF,这部分目前不跨平台、
 - 体积更小,启动速度更快,占用资源更少,支持水平扩展,更好适配云原生和微服务
 - Blazor
 - GRPC
 
ASP.NET Core Web应用启动
ASP.NET Core Web应用启动过程

通过上图大概可以把启动过程总结为:
创建主机生成器-配置主机->创建主机->运行主机
ASP.NET Core Web应用

主机(Host)
主机主要负责应用程序的启动和生命周期的管理,配置服务器和请求处理管道,实质是一个封装了应用资源的
object
配置日志、依赖服务的注入
Kestrel 介绍
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参数为例,验证下,这些配置的优先级。
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参数指定url 
dotnet 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");
            });
}
运行效果
具体优先级是
命令行 >应用配置>硬编码>环境变量
组件配置-Kestrel配置
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>();
            });
}
组件配置log配置
移除默认的日志组件,并添加制定的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>();

    



                
            
        
浙公网安备 33010602011771号