Какой смысл в hosting.json, если appsettings.json достаточно

В приложении .NET Core 2 Web API я мог переопределить конфигурацию urls с помощью appsettings.json, но в официальные документы они добавили дополнительный файл "hosting.json". Почему? Какой смысл добавлять сложности?

Код ниже полностью работает с использованием appsettings.json:

public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args)
    {
        var config = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory()) //see Side note below
            .AddJsonFile("appsettings.json", optional: true)
            .AddCommandLine(args)
            .Build();

        return WebHost.CreateDefaultBuilder(args)
            .UseConfiguration(config)
            .UseStartup<Startup>()
            .Build();
    }
}

Содержимое appsettings.json:

{
  "Logging": {
    "IncludeScopes": false,
    "Debug": {
      "LogLevel": {
        "Default": "Warning"
      }
    },
    "Console": {
      "LogLevel": {
        "Default": "Warning"
      }
    }
  },
  "urls": "http://*:5005/"
}

Боковое примечание: комментарий .SetBasePath(Directory.GetCurrentDirectory()) сохранит режим отладки VS 2017 в рабочем состоянии (означает применение launchSettings.json и URL-адрес автоматического запуска), в противном случае он не будет работать. Я предполагаю, что это связано с CreateDefaultBuilder реализация.


person Jawad Al Shaikh    schedule 11.10.2017    source источник


Ответы (1)


Я думаю, что hosting.json — это файл конфигурации, используемый специально для хостинга основных приложений asp.net. (если вы знаете больше о хостинге)

WebHostBuilder напрямую сопоставляет свои ключи с файлом hosting.json и не имеет возможности загружать раздел конфигурации, как это делается в обычных настройках конфигурации.

По ссылке прикрепленной к вашему сообщению

Используйте Configuration для настройки хоста. В следующем примере конфигурация узла необязательно указывается в файле hosting.json. Любая конфигурация, загруженная из файла hosting.json, может быть переопределена аргументами командной строки.

Если только мы явно используем hosting.json, конфигурации WebHostBuilder можно изменить с помощью команды dotnet.

Например

dotnet run --urls "http://*:8080"

это переопределит URL-адреса из файла hostings.json.

Надеюсь, это может дать некоторое представление.

ПК: host.json можно переименовать как myappsettings.json, он может иметь конфигурацию и конфигурацию Web Host Builder.

person RJ-    schedule 11.10.2017
comment
Чтобы переопределить hosting.json или любые URL-адреса [name].json из командной строки, это делается с помощью .AddCommandLine(args), ничего особенного в hosting.json в этом отношении. - person Jawad Al Shaikh; 12.10.2017
comment
Думаю переопределить hosting.json. так говорит документация. Кроме того, имеет смысл иметь hosting.json, в котором есть конкретная конфигурация хоста, отличная от любых других жаргонов, таких как конфигурация базы данных или ведение журнала или другие детали конфигурации. - person RJ-; 12.10.2017
comment
Очень часто используется один файл конфигурации для каждого приложения. когда пользователь планирует развернуть приложение, переход между различными файлами конфигурации для настройки или проверки параметров конфигурации неудобен. - person Jawad Al Shaikh; 12.10.2017
comment
@JawadAlShaikh да, и я согласен. - person RJ-; 12.10.2017