Я обнаружил, что при настройке консольного приложения с использованием .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