Я запускаю консольное приложение ядра .net, в котором размещается среда ядра aspnet. Я использую 3 различных окружения - Debug, Dev и Prod и связанные с ними файлы jset appsettings. Итак, я использую класс Startup, но даже до использования кода запуска, WebhostBuilder настроен. Из документов:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-3.0
Если значение для одного и того же ключа установлено одинаковыми или разными поставщиками конфигурации, последним значением, установленным для ключа, является используемое значение.
Хорошо, может быть, я не совсем понимаю, как правильные настройки попадают в объект конфигурации, но посмотрите ниже, как я добавляю корневой json-файл appsettings, а затем специфичный для среды, и это кажется на работу.
Так что самое большее, я должен иметь ДВУХ НАПРАВЛЕНИЙ appsettings и значение. Однако позже, когда объект config будет введен в одну из служб в моем классе Startup, значение, которое я пытаюсьвытащить из объекта конфигурации не существует. Поскольку моей переменной среды является Debug, она должна считывать значение из файла appsettings.debug.json
в appsettings.json
-not there-
в appsettings.debug.json
"AppSettings": {
"CustomerFilesRoot": "\\\\dev-haulops1\\d$\\BoxFiles",
Кроме того, когда я захожу в один из моих сервисов и смотрю на введенный объект конфигурации, я вижу 4 провайдера конфигурации Json? Почему 4 вместо 2? Разобравшись в них, есть два из appsettings.debug.json и appsettings.json Хм, странно. Я явно что-то упускаю.
В моем Program.cs
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureLogging((hostingContext, logging) =>
{
logging.AddEventLog();
})
.ConfigureAppConfiguration((context, config) =>
{
// Configure the app here.
var env = context.HostingEnvironment;
config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
})
.UseStartup<Startup>();
Начало Startup.cs
public IConfiguration Configuration { get; }
public IHostingEnvironment HostingEnvironment { get; }
public Startup(IConfiguration configuration, IHostingEnvironment environment)
{
Configuration = configuration;
HostingEnvironment = environment;
}
[обновление] Не уверен, что если кто-то заметил, я использую WebHost, а не Generic Host, так что, как и в случае с веб-приложением, нет никакой явной необходимости «добавлять» файлы настроек приложения. Например, в веб-приложении у меня есть. Итак, я все еще ломаю голову над тем, почему в консольном приложении, которое, как оказалось, использует среду выполнения aspcore и использует WebHost, не пытается использовать файл (по крайней мере, для меня), связанный со средой var, установленной в launchsettings.jsonфайл. Когда я убираю явную загрузку двух файлов appsettings, я загружаю их как провайдеров конфигурации во время отладки и вижу два (в отличие от 4, упомянутых ранее). Проблема в том, что когда я иду извлечь значение из объекта конфигурации, он дает мне значение из файла, который не соответствует среде var.
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}