什么决定了.net核心clr /运行时使用哪个.json文件?例如,如果两者中都有一个连接字符串。我在任何地方都找不到答案。
var env = builderContext.HostingEnvironment;
config.AddJsonFile("appsettings.json", optional: false)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
谢谢!
答案 0 :(得分:3)
没有“默认”顺序。 .NET Core将使用代码中指定的文件。 appsettings.json
或Json配置提供程序也没有什么特别的。就.NET Core而言,它们只是提供程序
此代码指定:
appsettings.json
文件已首先加载。如果不存在,则应用失败即使表达式$"appsettings.{env.EnvironmentName}.json"
也没有特殊含义。这是一个字符串插值表达式,将{env.EnvironmentName}
占位符替换为env.EnvironmentName
属性的值。
方法调用错误指定了顺序,以后的文件或提供程序将覆盖以前的文件或提供程序。
您可以在JSON文件之后添加命令行或EF Core提供程序 ,以使用存储在数据库中或在命令行中指定的值覆盖它们。
在文档和教程中对此进行了解释,例如Configuration in ASP.NET Core或Essential .NET - Configuration in .NET Core,但是它与Full框架的工作方式非常不同,需要一点时间来习惯。
答案 1 :(得分:0)
Config以源顺序加载。换句话说,您指定的每种配置类型都将按照您在Startup.cs
中添加的顺序加载。在这里,由于appsettings.json
是在appsettings.{env.EnvironmentName}.json
之前指定的,因此将首先加载它,然后加载特定于环境的版本(如果存在)。
无论您的配置源是什么,所有内容都以ConfigurationRoot
字典结尾。如果多个配置源指定了相同的密钥,则最后一个将获胜。换句话说,稍后添加的配置源将覆盖之前添加的配置源。