首页 > 编程 > .NET > 正文

asp.net core配置文件加载过程的深入了解

2024-07-10 12:48:36
字体:
来源:转载
供稿:网友

前言

配置文件中程序运行中,担当着不可或缺的角色;通常情况下,使用 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((context, options) =>    {     options.ValidateScopes = context.HostingEnvironment.IsDevelopment();    });   return builder;  }            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表