删除继承的ASP.NET Core appsettings

Sig*_*hol 7 appsettings asp.net-core

我的启动中有以下设置:

var builder = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json", true, true);
    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", true, true)
Run Code Online (Sandbox Code Playgroud)

appsettings.json:

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过添加具有不同值的匹配JSON结构来覆盖给定环境的有效设置,并省略我想要继承的那些,例如appsettings.Development.json:

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
}
Run Code Online (Sandbox Code Playgroud)

但是我可以删除条目或部分,除非用空值覆盖每个值属性吗?

-S

smn*_*ino 6

根据ASP.NET Core文档中的“ 配置”,设置是从两个文件中加载的,如果在两个文件中都指定了设置,则后者(即appsettings.{env.EnvironmentName}.json您的设置)中的一个将覆盖第一个文件。

因此,如果在appsettings.json文件中指定了设置,并且想要在开发环境中运行时将其删除,则需要在文件中相应地明确设置该设置(null,{}等,取决于设置)appsettings.Development.json

但是,这样的设置可能表明您的设置不应位于通用appsettings.json文件中,而应直接位于特定环境的配置设置文件中。这样,编写设置可能会更容易。

  • 这个答案并没有真正提供明确的解决方案。例如,如果我的配置键之一是 TimeSpan,并且我在“appsettings.json”中为其配置了一些值,那么如何在“appsettings.Development.json”中取消设置它?如果我将其设置为 `"configKey": ""`,我会得到一个异常,因为空字符串不能分配给 `TimeSpan`。 (2认同)