У меня есть проект ASP.NET Core (2.1) с appsettings.json
. Я использую WebHost.CreateDefaultBuilder()
. Файл appsettings.json
имеет следующую конфигурацию в свойствах файла:
Build Action: Content
Копировать в выходной каталог: не копировать
После сборки appsettings.json
заканчивается в bin\Debug\netcoreapp2.1\MyProj.runtimeconfig.json
.
Среда выполнения ASP.NET Core загружается нормально.
Я создал WebJobs (для .Net Core 2.1) и хотел сделать то же самое - установить Build Action на Content и позволить ему загружаться. В Main()
Program.cs у меня есть код, подобный
var builder = new HostBuilder()
...
.ConfigureAppConfiguration(b =>
{
var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
b.SetBasePath(Directory.GetCurrentDirectory());
b.AddJsonFile("appsettings.json", false, true);
b.AddJsonFile($"appsettings.{environment}.json", true, true);
b.AddEnvironmentVariables();
// Adding command line as a configuration source
if (args != null)
{
b.AddCommandLine(args);
}
}
Но среда выполнения пытается загрузить appsettings.json
(вместо MyWebJobProj.runtimeconfig.json
). Поэтому мне пришлось установить для параметра «Действие сборки» значение «Нет» и для параметра «Копировать в выходной каталог» значение «Всегда».
Однако я бы предпочел такой же подход, как в ASP.NET Core - он каким-то образом обрабатывает преобразование имени файла. Хотя в WebHost.CreateDefaultBuilder()
в основном тот же код, что и в моем WebJob. Что означает волшебное преобразование имени файла в конфигурации и почему оно работает только в одном типе проекта?