Содержание
В качестве нефайловых провайдеров конфигурации могут выступать параметры командной строки, объекты .NET и переменные среды окружения ASP.NET Core. Рассмотрим использование аргументов командной строки для конфигурации приложения ASP.NET Core
Использование аргументов командной строки
Аргументы командной строки являются одним из популярных способов задания начальной конфигурации приложения. Аргументы командной строки должны представляться в виде пары «ключ-значение». При этом, есть несколько способов их определения:
key1=value1 key2=value2
в этом способе мы через пробел перечисляем ключи и значения.
--key1=value1 или --key2 value2 или --key3
в этом случае перед названием ключа ставится -- и, при этом, значения ключа мы можем указывать через символ = или через пробел. Также, в этом случае можно не указывать значение ключа. Также, вместо — можно указывать символ /. Желательно изначально определиться с тем, какой способ задания аргументов командной строки будет использован и не смешивать его с другими способами.
Для использования аргументов командной строки в качестве конфигурации используется провайдер Command, который добавляется в приложение с помощью метода расширения WebApplicationBuilder.Configuration.AddCommandLine(). При этом, стоит отметить, что провайдер Command уже по умолчанию добавлен в приложение, поэтому нам нет необходимости явно вызывать этот метод.
Тестирование использования аргументов командной строки в Visual Studio
Для тестирования использования аргументов командной строки в начальной настройке приложения мы можем использовать несколько подходов.
Свойства отладки проекта
Мы можем задать аргументы командной строки вызвав в главном меню Visual Studio пункт «Откладка — Свойства отладки для проекта»
и задать аргументы командной строки для необходимого нам профиля запуска:
Теперь можем протестировать работу с аргументами командной строки в нашем приложении:
app.MapGet("/",(IConfiguration configuration) => configuration["hellostring"]);
После того, как мы добавляем аргументы командной строки через пункт меню Visual Studio в файле launchSettings.json, с которого мы уже знакомились, появится новый элемент:
Поэтому какой вариант выбрать — через меню или простым добавлением элемента commandLineArgs в файл launchSettings.json — решать вам.
Запуск приложения через PowerShell для разработчика
Используя PowerShell, мы можем запустить приложение из командной строки и передать ему необходимые параметры, например так:
здесь мы передали в аргумент командной строки hellostring=Привет. После того, как приложение запущено через PowerShell необходимо вручную открыть браузер и задать в адресной строке необходимый URL.
Передача псевдо-аргументов командной строки в приложение
При необходимости, мы можем программно задать аргументы командной строки:
string[] pseudoArgs = { "hellostring=Hello!" };
var builder = WebApplication.CreateBuilder(pseudoArgs);
Здесь массив pseudoArgs, содержащий аргументы командной строки передается в метод WebApplication.CreateBuilder. Результат работы приложения будет такой же, как на рисунке выше.
Использование метода AddCommandLine()
Также мы можем передавать аргументы командной строки через метод AddCommandLine() следующим образом:
var builder = WebApplication.CreateBuilder(args);
builder.Configuration.AddCommandLine(new string[] { "hellostring=Hello!" });
Результат работы представлен на рисунке выше.
Сопоставление имен ключей
Не всегда удобно, используя для запуска приложения командную строку, задавать длинные имена ключей. Например, выше мы использовали ключ с именем hellostring Использовать такой ключ каждый раз при запуске приложения — лишняя трата времени. Более того, чем длиннее имя ключа, тем легче ошибиться в его написании. Используя провайдер Command мы можем сопоставить имена ключей переданные в аргументах командной строки с их именами в приложении. Например, вот как можно сократить имена ключей, передаваемых в аргументах командной строки:
var builder = WebApplication.CreateBuilder(args);
var switchMappings = new Dictionary<string, string>()
{
{ "--hs", "hellostring" },
{ "--p", "ProgectName" }
};
builder.Configuration.AddCommandLine(args, switchMappings);
Здесь в качестве второго параметра метода AddCommandLine мы передаем словарь в котором сопоставляется имена ключей в аргументах командной строки и в приложении. Теперь можно получить значение аргумента, используя конечную точку приложения:
app.MapGet("/", (IConfiguration configuration) => configuration["hellostring"]);
Чтобы протестировать работу приложения, запустим его через PowerShell, как было рассказано выше, используя краткое имя ключа:
PS C:\.....\Todo> dotnet run ToDo -lp=https --hs=Привет
и получим следующий результат:
Итого
Сегодня мы рассмотрели использование аргументов командной строки для задания начальной конфигурации приложения. Каждый параметр задается в виде пар «ключ-значение» и при этом аргументы могут задаваться разными вариантами — через косую черту, начинающиеся с символов -- и.т.д. Для тестирования использования аргументов командной строки мы можем использовать различные варианты — через файл launchSettings.json , через запуск приложения в PowerShell и т.д.



