Dotnet Core默认使用哪个appsettings.json文件,环境文件或父文件?

时间:2018-07-30 10:22:07

标签: c# .net asp.net-core

什么决定了.net核心clr /运行时使用哪个.json文件?例如,如果两者中都有一个连接字符串。我在任何地方都找不到答案。

var env = builderContext.HostingEnvironment;
                config.AddJsonFile("appsettings.json", optional: false)
                      .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);

谢谢!

2 个答案:

答案 0 :(得分:3)

没有“默认”顺序。 .NET Core将使用代码中指定的文件。 appsettings.json或Json配置提供程序也没有什么特别的。就.NET Core而言,它们只是提供程序

此代码指定:

  1. 所需的appsettings.json文件已首先加载。如果不存在,则应用失败
  2. 接下来将加载可选的特定于环境的文件,该文件可能会覆盖第一个文件。如果不存在,则不会加载任何内容

即使表达式$"appsettings.{env.EnvironmentName}.json"也没有特殊含义。这是一个字符串插值表达式,将{env.EnvironmentName}占位符替换为env.EnvironmentName属性的值。

方法调用错误指定了顺序,以后的文件或提供程序将覆盖以前的文件或提供程序。

您可以在JSON文件之后添加命令行或EF Core提供程序 ,以使用存储在数据库中或在命令行中指定的值覆盖它们。

在文档和教程中对此进行了解释,例如Configuration in ASP.NET CoreEssential .NET - Configuration in .NET Core,但是它与Full框架的工作方式非常不同,需要一点时间来习惯。

答案 1 :(得分:0)

Config以源顺序加载。换句话说,您指定的每种配置类型都将按照您在Startup.cs中添加的顺序加载。在这里,由于appsettings.json是在appsettings.{env.EnvironmentName}.json之前指定的,因此将首先加载它,然后加载特定于环境的版本(如果存在)。

无论您的配置源是什么,所有内容都以ConfigurationRoot字典结尾。如果多个配置源指定了相同的密钥,则最后一个将获胜。换句话说,稍后添加的配置源将覆盖之前添加的配置源。