c# - 使用特定于环境的 appsettings.json 文件时,是否有办法按设置替换而不是添加?
问题描述
我发现,当使用.NET Generic Host设置控制台应用程序并使用多个appsettings.json
文件时,后面文件的内容会覆盖内存中早期文件(注册方式)的内容,但它们不会替换它。
让我解释一下,我将在下面发布重现此代码的代码,但首先是两个 json 文件:
appsettings.json
, 先加载{ "Folders": [ "main-1", "main-2" ] }
appsettings.debug.json
, 加载第二{ "Folders": [ "debug-1" ] }
将其加载到选项对象时,我希望调试设置优先,并且确实如此,但它只是替换了主配置文件的第一个元素。
让我重新表述一下。我将配置文件加载到这个类中:
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 控制台应用程序,我必须添加以下包:
- Microsoft.Extensions.Configuration
- Microsoft.Extensions.Configuration.Json
- Microsoft.Extensions.Configuration.Binder
解决方案
推荐阅读
- css - 如何将此样式应用于我的幻灯片?
- python - 将列与整数和字符串相乘
- visual-studio - Visual Studio 2017 V15.9.4 - CSharpRenameTrackingCodeFixProvider 遇到错误并已被禁用
- architecture - (Nand2tetris CPU)(什么/多少)在每个时钟周期发生?
- facebook - 如何确定用户使用哪个提供商登录
- sql - 文本解析的优化——Oracle SQL
- pytest - 将带有排除标签的测试报告为已跳过
- asp.net-core - 无法引用 Blazor 组件库项目
- laravel - 在比较表中使用 Goutte 截取亚马逊详细信息页面
- python - 如何对齐两个数字列表