首页 > 解决方案 > 使用特定于环境的 appsettings.json 文件时,是否有办法按设置替换而不是添加?

问题描述

我发现,当使用.NET Generic Host设置控制台应用程序并使用多个appsettings.json文件时,后面文件的内容会覆盖内存中早期文件(注册方式)的内容,但它们不会替换它。

让我解释一下,我将在下面发布重现此代码的代码,但首先是两个 json 文件:

将其加载到选项对象时,我希望调试设置优先,并且确实如此,但它只是替换了主配置文件的第一个元素。

让我重新表述一下。我将配置文件加载到这个类中:

internal class Options
{
    public List<string> Folders { get; } = new List<string>();
}

添加两个文件并最后添加调试文件时,我想要的是上面的列表属性仅包含"debug-1".

相反,它包含"debug-1", "main-2",所以只有第一个元素被覆盖,第二个没有。

虽然我可以理解这对于字典,只替换我实际指定的键,但对于一个数组来说,它似乎有点奇怪(对我来说)。

这是代码:

using System;
using System.Collections.Generic;
using Microsoft.Extensions.Configuration;

namespace ConsoleApp3
{
    class Program
    {
        static void Main()
        {
            var builder = new ConfigurationBuilder();
            builder.AddJsonFile("appsettings.json");
            builder.AddJsonFile("appsettings.debug.json");

            var configuration = builder.Build();
            var options = configuration.Get<Options>();

            foreach (var folder in options.Folders)
                Console.WriteLine(folder);
        }
    }

    internal class Options
    {
        public List<string> Folders { get; } = new List<string>();
    }
}

这个程序的输出是这样的:

debug-1
main-2

我希望它只包含"debug-1". 我可以在加载配置文件时指定一些使其行为如此的东西吗?

这是一个 .NET Core 2.1 控制台应用程序,我必须添加以下包:

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

解决方案


推荐阅读