ASP.NET Core 项目启动,默认执行顺序为:宿主 Host -> 读取配置 -> 日志设置 -> 注册服务(DI)-> 添加中间件 -> WebHost 监听 -> 后台 Work 启动。

配置的加载和读取是在启动流程的最前面。微软关于 ASP.NET Core 中的配置文档:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/?view=aspnetcore-6.0

Host.CreateDefaultBuilder 方法中,按照以下顺序为应用提供默认配置:

  • ChainedConfigurationProvider:添加现有的 作为源。在默认配置示例中,添加主机配置,并将它设置为应用配置的第一个源。

  • 使用 appsettings.json的 appsettings.json。

  • 使用 JSON 配置提供程序通过 appsettings..json 提供。例如,appsettings.Production.json 和 appsettings.Development.json。

  • 应用在 环境中运行时的应用机密。

  • 使用环境变量配置提供程序通过环境变量提供。

  • 使用命令行配置提供程序通过命令行参数提供。

源码如下:

public static IHostBuilder CreateDefaultBuilder(string[] args){var builder = new HostBuilder();builder.UseContentRoot(Directory.GetCurrentDirectory());builder.ConfigureHostConfiguration(config =>{config.AddEnvironmentVariables(prefix: "DOTNET_");if (args != null){config.AddCommandLine(args);}});builder.ConfigureAppConfiguration((hostingContext, config) =>{var env = hostingContext.HostingEnvironment;config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true).AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);if (env.IsDevelopment() && !string.IsNullOrEmpty(env.ApplicationName)){var appAssembly = Assembly.Load(new AssemblyName(env.ApplicationName));if (appAssembly != null){config.AddUserSecrets(appAssembly, optional: true);}}config.AddEnvironmentVariables();if (args != null){config.AddCommandLine(args);}}).ConfigureLogging((hostingContext, logging) =>{var isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows);// IMPORTANT: This needs to be added *before* configuration is loaded, this lets// the defaults be overridden by the configuration.if (isWindows){// Default the EventLogLoggerProvider to warning or abovelogging.AddFilter<EventLogLoggerProvider>(level => level >= LogLevel.Warning);}logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));logging.AddConsole();logging.AddDebug();logging.AddEventSourceLogger();if (isWindows){// Add the EventLogLoggerProvider on windows machineslogging.AddEventLog();}}).UseDefaultServiceProvider((context, options) =>{var isDevelopment = context.HostingEnvironment.IsDevelopment();options.ValidateScopes = isDevelopment;options.ValidateOnBuild = isDevelopment;});return builder;}

源码地址:https://github.com/dotnet/extensions/blob/release/3.1/src/Hosting/Hosting/src/Host.cs

通过代码可以看出,程序获取配置优先级依次为:appsettings.json -> appsettings.环境.json -> 环境变量 -> 命令行参数。我们根据优先级进行测试。

新建一个控制台方法返回所有配置信息,代码如下:

private readonly ILogger<HomeController> _logger;public IConfiguration _configuration { get; }public HomeController(ILogger<HomeController> logger, IConfiguration configuration){_logger = logger;_configuration = configuration;}public IActionResult Index(){return Json(_configuration.AsEnumerable());}

首先,appsettings.json 配置文件,如下:

{"Logging": {"LogLevel": {"Default": "Information","Microsoft": "Warning","Microsoft.Hosting.Lifetime": "Information"}},"AllowedHosts": "*","WebConfig": {"Name": "itsvse.com","Date": "2021"}
}

新建 appsettings.Test.json 配置,如下:

{"WebConfig": {"Name": "itsvse.com test"}
}

尝试启动项目,查看 WebConfig:Name 和 WebConfig:Date 的配置,如下图:

找到 Properties -> launchSettings.json 文件,修改 ASPNETCORE_ENVIRONMENT 环境配置为 Test,如下:

"IIS Express": {"commandName": "IISExpress","launchBrowser": true,"environmentVariables": {"ASPNETCORE_ENVIRONMENT": "Test"}}

这时程序会读取 appsettings.Test.json 的配置,尝试重新启动项目,发现 WebConfig:Name 已经覆盖了,如下图:

再次修改 launchSettings.json 文件,通过环境变量设置 WebConfig:Name 的值,代码如下:

"IIS Express": {"commandName": "IISExpress","launchBrowser": true,"environmentVariables": {"ASPNETCORE_ENVIRONMENT": "Test","WebConfig__Name": "itsvse env"}}

备注:环境变量修改 WebConfig:Name 的值,变量名称为:WebConfig__Name (中间用双下划线隔开

尝试重启项目,发现 WebConfig:Name 的值,已经被环境变量设置的值所覆盖,如下图:

尝试通过命令行的形式修改默认配置的值,启动命令如下:

dotnet run --WebConfig:Name="itsvse command"

如下图:

用实践来测试配置键值的优先级,完。

ASP.NET Core(十)Configuration 配置优先级详解相关推荐

  1. ASP.NET Core 中间件(Middleware)详解

    ASP.NET Core 中间件(Middleware)详解 原文:ASP.NET Core 中间件(Middleware)详解 本文为官方文档译文,官方文档现已非机器翻译 https://docs. ...

  2. ASP.NET Core分布式项目实战(详解oauth2授权码流程)--学习笔记

    最近公司产品上线,通宵加班了一个月,一直没有更新,今天开始恢复,每日一更,冲冲冲 任务13:详解oauth2授权码流程 我们即将开发的产品有一个用户 API,一个项目服务 API,每个服务都需要认证授 ...

  3. ASP.NET Core的配置(2):配置模型详解

    在上面一章我们以实例演示的方式介绍了几种读取配置的几种方式,其中涉及到三个重要的对象,它们分别是承载结构化配置信息的Configuration,提供原始配置源数据的ConfigurationProvi ...

  4. ASP.NET Core启动地址配置方法及优先级顺序 | .NET 6 版本

    前言 上次,我们讨论了如何通过配置或代码方式修改启动地址:<ASP.NET Core启动地址配置方法及优先级顺序>.不过是基于 .NET 5 版本的. 由于 .NET 6 使用了最小 WE ...

  5. 翻译 - ASP.NET Core 基本知识 - 配置(Configuration)

    翻译自 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-5.0 ASP ...

  6. ASP.NET Core开发-如何配置Kestrel 网址Urls

    ASP.NET Core中如何配置Kestrel Urls呢,大家可能都知道使用UseUrls() 方法来配置. 今天给介绍全面的ASP.NET Core 配置 Urls,使用多种方式配置Urls. ...

  7. ASP.NET Core macOS 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core macOS 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core macOS 环境配置 - ASP.NET Core 基础 ...

  8. ASP.NET Core Windows 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Windows 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Windows 环境配置 ASP.NET Core ...

  9. 第十二章 Spring Cloud Config 统一配置中心详解

    目录 一.配置问题分析及解决方案 1.问题分析 2.解决方案 二.Spring Cloud Config 介绍 1.Spring Cloud Config特性 2.Spring Cloud Confi ...

最新文章

  1. 图片和文件上传的两款插件
  2. python 为什么动态语言图片_聊聊动态语言那些事(Python)
  3. Codeforces Round #709 (Div. 1) B. Playlist 链表维护 + bfs
  4. 前端学习(2734):重读vue电商网站44之使用 echarts
  5. SVM支持向量机:分类、回归和核函数
  6. pyspark--用法
  7. 2019微信语音转发方法新版微信转发语音方法
  8. 百度地图秘钥未授权问题
  9. 计算机内存条能装几个,电脑能装几个内存条_一般电脑插几个内存条
  10. 折弯机使用说明书_折弯机操作图解法-如何使用折弯机
  11. ajax查询全国天气预报,使用聚合数据api接口
  12. 视觉里程计 第一部分:前30年的发展和理论基础
  13. java 15k,广州-Java高级-15k-22k(月薪)
  14. web开发学习,HTML标签语义化
  15. 【读书笔记】《未来闪影》罗伯特·J·索耶
  16. YUV 后面数字的含义_大众车尾的280、330是什么含义?好多人不懂,买车要看准了...
  17. 【rpc】超详细介绍
  18. 完美国际mysql后台_完美国际-后台管理配置-.tomcat配置教程
  19. java通用dao_java通用DAO | 学步园
  20. 系统测试的类型有哪些,我给你介绍

热门文章

  1. Chrome DevTools — Network 1
  2. 关于tomcat和sessionCookieName和SESSION_PARAMETER_NAME以及disableURLRewriting参数原理和使用...
  3. Building a Space Station--POJ 2031
  4. python c 选择_C和Python,小白应该选择学习哪门语言?
  5. GDB调试qemu-kvm
  6. 【mysql】mysql优化
  7. 类属性和实例属性冲突
  8. 文件传输基础——Java IO流
  9. Java设计模式(8)组合模式(Composite模式)
  10. 用计算机算算术平方根顺序是ON然后是什么,第2课时用计算器求一个正数的算术平方根.ppt...