asp.netcore 深入了解配置文件加载过程

 

前言

    配置文件中程序运行中,担当着不可或缺的角色;通常情况下,使用 visual studio 进行创建项目过程中,项目配置文件会自动生成在项目根目录下,如 appsettings.json,或者是被大家广泛使用的 appsettings.{env.EnvironmentName}.json;配置文件
作为一个入口,可以让我们在不更新代码的情况,对程序进行干预和调整,那么对其加载过程的全面了解就显得非常必要。

何时加载了默认的配置文件

在 Program.cs 文件中,查看以下代码

 public class Program     {         public static void Main(string[] args)         {             CreateWebHostBuilder(args).Build().Run();         }          public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>             WebHost.CreateDefaultBuilder(args)                 .UseStartup<Startup>();     }
  • WebHost.CreateDefaultBuilder 位于程序集 Microsoft.AspNetCore.dll 内,当程序执行 WebHost.CreateDefaultBuilder(args) 的时候,在 CreateDefaultBuilder 方法内部加载了默认的配置文件
    代码如下
public static IWebHostBuilder CreateDefaultBuilder(string[] args)         {             var builder = new WebHostBuilder();              if (string.IsNullOrEmpty(builder.GetSetting(WebHostDefaults.ContentRootKey)))             {                 builder.UseContentRoot(Directory.GetCurrentDirectory());             }             if (args != null)             {                 builder.UseConfiguration(new ConfigurationBuilder().AddCommandLine(args).Build());             }              builder.UseKestrel((builderContext, options) =>                 {                     options.Configure(builderContext.Configuration.GetSection("Kestrel"));                 })                 .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())                     {                         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) =>                 {                     logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));                     logging.AddConsole();                     logging.AddDebug();                     logging.AddEventSourceLogger();                 })                 .ConfigureServices((hostingContext, services) =>                 {                     // Fallback                     services.PostConfigure<HostFilteringOptions>(options =>                     {                         if (options.AllowedHosts == null || options.AllowedHosts.Count == 0)                         {                             // "AllowedHosts": "localhost;127.0.0.1;[::1]"                             var hosts = hostingContext.Configuration["AllowedHosts"]?.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);                             // Fall back to "*" to disable.                             options.AllowedHosts = (hosts?.Length > 0 ? hosts : new[] { "*" });                         }                     });                     // Change notification                     services.AddSingleton<IOptionsChangeTokenSource<HostFilteringOptions>>(                         new ConfigurationChangeTokenSource<HostFilteringOptions>(hostingContext.Configuration));                      services.AddTransient<IStartupFilter, HostFilteringStartupFilter>();                 })                 .UseIIS()                 .UseIISIntegration()                 .UseDefaultServiceProvider((
                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信