Содержание
Одним из способов конфигурации консольного приложения является передача параметров приложения через командную строку. В зависимости от полученных параметров, наше приложение может действовать соответствующим образом, например, проводить предварительные вычисления или же загружать данные из файла, путь к которому был передан в параметрах.
Создание и настройка консольного приложения
Для начала, создадим новое консольное приложение, с которым будем в дальнейшем работать. Запустим Visual Studio (у меня это Visual Studio 2022) и создадим новый проект «Консольное приложение Microsoft»:

Чтобы в дальнейшем наша работ была единообразна, на третьем шаге создания нового проекта обязательно установите флажок напротив опции «Не использовать операторы верхнего уровня»:

После того, как вы нажмете кнопку «Создать» должен создаться новый проект с привычным для нас содержимым — классом Program и одним методом — Main:
namespace ConsoleParams
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
}
Так как мы будем в дальнейшем экспериментировать с параметрами нашего приложения, то лучше, чтобы наш проект собирался в папке к которой мы сможем достаточно быстро получить доступ из командной строки, например, в папке «C:\Projects». Для этого кликаем правой кнопкой мыши на названии проекта в обозревателе решений и выбираем в контекстном меню пункт «Свойства»

В открывшемся окне переходим в раздел «Сборка -> Выходные данные» и указываем путь в строке «Базовый путь для выходных данных»:

Теперь собранный проект будет размещаться в папке «C:\Projects\Debug\net7.0\» (если у Вас, как и у меня установлена Visual Studio 2022 и .NET 7). Теперь посмотрим немного более подробно на код нашего приложения.
Шаблон консольного приложения C# и метод Main
По умолчанию, новое консольное приложение содержит один класс (Program), в котором определен единственный статический метод Main:
namespace ConsoleParams
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
}
При этом, название пространства имен в котором расположен класс Program, совпадает с названием нашего проекта. Что касается названия класса, то, по умолчанию — это Program, однако, если необходимо, то мы можем изменять его как угодно на свое усмотрение, например, назвать его MyProgram или как-то ещё. Что нельзя делать, так это изменять название метода Main или делать его не статическим.
Main — это точка входа приложения C#. С этого метода начинается выполнение программыНапример, если вы попробуете переименовать метод Main во что-нибудь другое, например, MyMain, то при попытке запуска приложения гарантированно получите ошибку следующего вида:
При этом, Вы можете использовать различные сигнатуры метода Main. Допускаются следующие сигнатуры Main:
static void Main(string[] args) static void Main() static async Task Main(string[] args) static async Task Main() static int Main() static int Main(string[] args) static async Task<int> Main() static async Task<int> Main(string[] args)
Например, если я захочу, чтобы в момем методе Main выполнялись какие-то асинхронные задачи, то я могу изменить шаблон своего консольного приложения следующим образом:
namespace ConsoleParams
{
internal class MyProgram
{
static async Task Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
}
на работоспособность приложения такое изменение никак не повлияет так как я использовал допустимую сигнатуру метода Main. По умолчанию, метод Main объявлен с параметром string[], который содержит аргументы командной строки.
Передача параметров в консольное приложение через аргументы командной строки
Допустим, мы хотим, чтобы наше приложение вместо безликого «Hello, World!» здоровалось с нами в зависимости то того, какое имя будет передано приложение через командную строку. Перепишем наше приложение следующим образом:
static async Task Main(string[] args)
{
if (args.Length == 0)
{
Console.WriteLine("Hello, World!");
}
else
{
foreach (var arg in args)
{
Console.WriteLine($"Hello, {arg}");
}
}
}
Теперь, если приложение запустится без параметров, то появится стандартная фраза «Hello, World!», иначе — программа будет «здороваться» с каждым, чьё имя будет передано в параметрах.
Соберем наше приложение и проведем тестирование непосредственно из командной строки. Мы договорились, что собираться приложение будет в папке «C:/Projects».
Запускам командную строку (cmd) и выполняем следующие команды:
CD C:\Projects\Debug\net7.0 ИмяПроекта ИмяПользователя1 ИмяПользователя2
Здесь первой командой cd мы переходим в папку приложения. Второй командой мы запускаем приложение и передаем ему параметры. Здесь ИмяПроекта — название вашего проекта, ИмяПользователя1, ИмяПользователя2 — имена пользователей. Например, у меня получился такой вызов:

В результате, мы увидим в консоли следующее:
Hello, Bob
Hello, John
Отладка консольного приложения с параметрами
Каждый раз запускать командную строку Windows для отладки консольного приложения, использующего параметры не удобно. Для того, чтобы запустить приложение в режиме отладки сразу с параметрами можно сделать следующее:
- Заходим в свойства проекта
- Переходим на пункт «Отладка» и жмем на ссылку «Открыть пользовательский интерфейс профилей запуска отладки»

3. В открывшемся окне в поле «Аргументы командной строки» записываем необходимые нам для откладки параметры через пробел:

Теперь можете запустить приложение в режиме отладки и убедиться, что приложение запущено с заданными параметрами:

Определение параметров с пробелами
Параметры (аргументы командной строки) разделяются пробелами. Уже в приложении строка с пробелами разделяется на массив строк. Однако, что делать, если нам необходимо передать значение параметра, которое уже само по себе содержит пробелы? Для этого достаточно заключить такой параметр в двойные кавычки, например:
"Это параметр с пробелами"
В этом случае строка будет интерпретирована как один параметр.
Получение параметров приложения вне метода Main
Если ваше приложение достаточно большое, то, вполне возможно, что Вам потребуется получить аргументы командной строки где-то за пределами метода Main. Сделать это возможно, используя класс Environment. У этого класса определен статический метод GetCommandLineArgs(), который возвращает аргументы командной строки. При этом стоит учесть следующий момент:
Например, вот такой вызов:
foreach (var arg in Environment.GetCommandLineArgs())
{
Console.WriteLine(arg);
}
приведет к следующему выводу в консоли:
Это параметр с пробелами
Вторая строка в консоли — это параметр, который мы определили для приложения в предыдущем примере.
Итого
Параметры для консольного приложения могут передаваться через командную строку. Параметры отделяются друг от друга пробелами. Если необходимо передать параметр, содержащий пробелы, то он должен быть заключен в двойные кавычки. Если необходимо получить параметры приложение за пределами метода Main, то можно воспользоваться статическим классом Environment.