• Asp.net Core启动流程讲解(二)


    asp.net core内,launchSettings.json提供给开发工具一些参数化,提供开发调试,appsettings.json(appsettings.Development.json)做发行/开发调试时配置参数化

    launchSettings.json

    Properties 文件夹中找到此文件

    1、Visual Studio 或使用.NET Core CLI 运行此 ASP.NET Core 项目时,将使用此文件中的设置。
    2、仅用于本地开发环境。
    3、默认项目的profiles节点下包括 IIS Express项目同名的节点,前者是Visual Studio的IIS Express调试参数,后者是命令行启动.net core项目的配置参数
    可通过配置 profiles/节点/environmentVariables/ASPNETCORE_ENVIRONMENT 实现配置环境变量,通过调用IHostingEnvironment.IsEnvironment实现动态区分环境。

    IHostingEnvironment.EnvironmentName会默认读取 ASPNETCORE_ENVIRONMENT 环境变量
    Startup类的Configure方法默认实现

            public void Configure(IApplicationBuilder app, IHostingEnvironment env)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
    
                app.UseMvc();
            }
    

    IHostingEnvironment.IsDevelopment是扩展方法,实际上是

                  public static bool IsDevelopment(this IHostingEnvironment  hostingEnvironment)
                  {
                         if (hostingEnvironment == null)
                         {
                               throw new ArgumentNullException("hostingEnvironment");
                         }
    
                         return  hostingEnvironment.IsEnvironment(EnvironmentName.Development);
                  }
    

    IHostingEnvironment.IsEnvironment实际上是扩展方法,具体实现如下

                  public static bool IsEnvironment(this IHostingEnvironment 
    hostingEnvironment, string environmentName)
                  {
                         if (hostingEnvironment == null)
                         {
                               throw new ArgumentNullException("hostingEnvironment");
                         }
                         return string.Equals(hostingEnvironment.EnvironmentName, 
    environmentName, 5);
    
                  }
    
    
    

    最后,实际上区分运行环境是IHostingEnvironment.EnvironmentName加载ASPNETCORE_ENVIRONMENT 环境变量

    扩展自定义开发环境

    复制launchSettings.json文件的profiles结构,修改一段自定义启动配置

        "Debug_Project": {
          "commandName": "Project",
          "launchBrowser": true,
          "launchUrl": "api/values",
          "applicationUrl": "http://localhost:5000",
          "environmentVariables": {
            "ASPNETCORE_ENVIRONMENT": "Debug"
          }
        }
    

    Visual Studio 下果然出现了Debug_Project调试启动项

    在Startup类的 添加一段测试代码

                if (env.IsEnvironment("Debug"))
                {
                    var before = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
                    Console.WriteLine($"{before}");
                }
    
    

    如愿打印出了Debug,说明程序启动调试时,环境变量ASPNETCORE_ENVIRONMENT的值,如愿变成了"Debug"

    1、借助于launchSettings.json,可以在开发调试环境,区分运行环境,比如加载通过参数,加载不同的 appsettings.json 文件,比如开发默认的环境变量值 Development 加载配置文件 appsettings.Development.json,反之则加载 appsettings.json
    2、由于区分IHostingEnvironment.EnvironmentName实际上是指向约定的环境变量 ASPNETCORE_ENVIRONMENT ,可以在发布k8s/docker时,配置环境变量ASPNETCORE_ENVIRONMENT,区分运行环境,做不同的选项加载。

    appsettings.json(appsettings.Development.json)

    综上所述,appsettings.json(appsettings.Development.json)的加载,实际上是IHostingEnvironment.EnvironmentName实际上是指向约定的环境变量 ASPNETCORE_ENVIRONMENT,读出环境环境,是否为Development,成立,则加载配置文件 appsettings.Development.json,反之则加载配置文件 appsettings.json

    后记

    深挖了一下Startup配置文件加载过程,发现了很多之前遗漏的知识,这也就是这个分享系列的主旨,查漏补缺,一边写,一边查阅资料,梳理
    如果对于内容有交流和学习的,可以加 .Net应用程序框架交流群,群号386092459

    分享一个公众号,关注学习/分享的

  • 相关阅读:
    链表 原文:http://canlynet.blog.163.com/blog/static/2550136520091120101712136/
    单向链表操作 原文:http://canlynet.blog.163.com/blog/static/255013652009113001041903/
    二叉树——根据遍历结果,画出对应的二叉树 转载至:http://canlynet.blog.163.com/blog/static/255013652009112602449178/
    数据结构经典问题——出栈顺序 转载至:canlynet微博
    sql server2005 常用语句
    禁止复制文字,下载图片的方法
    linux关机命令大全 来源于网络
    工厂模式
    设计模式的七大原则
    单例模式
  • 原文地址:https://www.cnblogs.com/NCoreCoder/p/13426172.html
Copyright © 2020-2023  润新知