Передача параметров в консольное приложение

Одним из способов конфигурации консольного приложения является передача параметров приложения через командную строку. В зависимости от полученных параметров, наше приложение может действовать соответствующим образом, например, проводить предварительные вычисления или же загружать данные из файла, путь к которому был передан в параметрах.

Создание и настройка консольного приложения

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

Консольное приложение C#
Консольное приложение C#

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

Не использовать операторы верхнего уровня
Не использовать операторы верхнего уровня

После того, как вы нажмете кнопку «Создать» должен создаться новый проект с привычным для нас содержимым — классом 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, то при попытке запуска приложения гарантированно получите ошибку следующего вида:

Ошибка CS5001 Программа не содержит статического метода «Main», подходящего для точки входа.

При этом, Вы можете использовать различные сигнатуры метода 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, Vlad
Hello, Bob
Hello, John

Отладка консольного приложения с параметрами

Каждый раз запускать командную строку Windows для отладки консольного приложения, использующего параметры не удобно. Для того, чтобы запустить приложение в режиме отладки сразу с параметрами можно сделать следующее:

  1. Заходим в свойства проекта
  2. Переходим на пункт «Отладка» и жмем на ссылку «Открыть пользовательский интерфейс профилей запуска отладки»
Открыть пользовательский интерфейс профилей запуска отладки
Открыть пользовательский интерфейс профилей запуска отладки

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

Аргументы командной строки
Аргументы командной строки

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

Откладка приложения с параметрами
Откладка приложения с параметрами

Определение параметров с пробелами

Параметры (аргументы командной строки) разделяются пробелами. Уже в приложении строка с пробелами разделяется на массив строк. Однако, что делать, если нам необходимо передать значение параметра, которое уже само по себе содержит пробелы? Для этого достаточно заключить такой параметр в двойные кавычки, например:

"Это параметр с пробелами"

В этом случае строка будет интерпретирована как один параметр.

Получение параметров приложения вне метода Main

Если ваше приложение достаточно большое, то, вполне возможно, что Вам потребуется получить аргументы командной строки где-то за пределами метода Main. Сделать это возможно, используя класс Environment. У этого класса определен статический метод GetCommandLineArgs(), который возвращает аргументы командной строки. При этом стоит учесть следующий момент:

Первым элементом массива является имя исполняемого файла. Последующие элементы, если они существуют, содержат аргументы командной строки

Например, вот такой вызов:

foreach (var arg in Environment.GetCommandLineArgs())
{
    Console.WriteLine(arg);	
}

приведет к следующему выводу в консоли:

C:\Projects\Debug\net7.0\ConsoleParams.dll
Это параметр с пробелами

Вторая строка в консоли — это параметр, который мы определили для приложения в предыдущем примере.

Итого

Параметры для консольного приложения могут передаваться через командную строку. Параметры отделяются друг от друга пробелами. Если необходимо передать параметр, содержащий пробелы, то он должен быть заключен в двойные кавычки. Если необходимо получить параметры приложение за пределами метода Main, то можно воспользоваться статическим классом Environment.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии