Содержание
Одним из способов конфигурации консольного приложения является передача параметров приложения через командную строку. В зависимости от полученных параметров, наше приложение может действовать соответствующим образом, например, проводить предварительные вычисления или же загружать данные из файла, путь к которому был передан в параметрах.
Создание и настройка консольного приложения
Для начала, создадим новое консольное приложение, с которым будем в дальнейшем работать. Запустим 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
.