Разработка под linux / Создание проекта в dotnet. Подключение CommandLineParser

Создаем проект

И так, теперь, когда мы установили .net, у нас в системе становится доступной утилита dotnet. Можно ее запустить

dotnet -h

и глянуть что она выдаст, интересует нас больше всего вот эта часть

Где собственно описаны доступные параметры, которые позволяют выполнять разные действия, например, создавать или запускать проект.

Вот и попробуем создать новый проект. Сначала создадим папку под него:

mkdir project07
cd project07

а теперь создадим в папке, новый проект. Для этого надо использовать параметр new. Глянем какие параметры ему можно передать:

dotnet new --help

Получается, что если написать dotnet new -l то он выведет список шаблонов приложения. Помните, когда мы в visual studio создавали проект мы там выбирали консольное или webforms приложение. Вот это оно и есть только в консольном виде. Пробуем:

dotnet new -l

я зелененьким выделил шаблоны консольного приложения и тестов. Мы к ним еще вернемся. Но сейчас для нас более важным является создание Solution, то есть это проект в который может входить несколько приложений. Visual Studio по умолчанию создает Solution. А нужно это для того, чтобы можно было отдельно разрабатывать приложение и отдельно писать тесты.

И так давайте создадим solution.

Пишем команду

можно глянуть что появилось в папке

собственно, там файлик решения.

Теперь будем добавлять в него консольное приложение. Запускаем команды

В результате получим папку с файлом проекта, в которой появилась папка с подпроектом.

Надо теперь эту папку подключить к Solution. Пишем:

то есть папка подключилась, можно еще так посмотреть:

Давайте теперь глянем что у нас в коде программы. Откроем файлик application/Program.cs

в нем всего две строчки, это новый шаблон .net 6, который позволяет писать C# приложения не создавая класса и функции Main. Это удобно если ваша программа не предполагает использование классов, либо вы как воспитанный человек раскидываете отдельные классы по файлам.

Мы же чтобы не усложнять заменим этот код на стандартный код с функцией Main вот так

using System;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello, World!");
    }
}

попробуем запустить приложение, для этого воспользуемся командой dotnet run и передадим с помощью флага p приложение которое мы хотим запустить

dotnet run

Ну вроде с проектом разобрались. Теперь разберёмся как подключать сторонние либы.

Подключаем стороннюю библиотечку

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

То есть надо вам, например, генерить эксель файлы из приложения. Как это сделать? А вот вы идете на специальный ресурс https://www.nuget.org/packages?q=excel и ищете библиотечку под ваши нужды.

Захотели поработать со звуком, пожалуйста: https://www.nuget.org/packages?q=audio

В общем тьма либ под любую нужду.

Нам надо библиотечку которая будет обрабатывать аргументы командной строки. Одна из самых удобных называется CommandLineParser https://www.nuget.org/packages/CommandLineParser/2.8.0. Если глянуть у нее 34 мильона скачиваний это вам не хухры мухры.

В целом о качестве сторонний библиотечки говорит количество ее использований, как правило, чем больше – тем лучше.

Чтобы узнать какую команду использовать для установки библиотечки надо нажать сюда и скопировать команду

dotnet add package CommandLineParser --version 2.8.0

причем команду надот запускать их того подпроекта к которому вы хотите ее добавить, в нашем случае к подпроекту application.

Так что переходим в папку application

cd application

и запускаем:

если глянуть теперь файл проекта, то мы увидим, что там добавилась ссылка на новый пакет

может возникнуть вопрос, а что-за пакет-то где его искать? Так вот, на самом деле это обыкновенная dll-ка которая лежит в папке ~/.nuget/packages,

то есть библиотечка уже скомпилирована причем под разные версии .net.

Кстати, если вы забыли, то ~ означает вашу домашнюю папку.

Таким образом ~/.nuget/packages это своего рода локальное хранилище всех скачанных пакетов и вы можете подключать их к своему проект когда вам удобно без необходимости их повторно качать.

После того как либа подключена к проекту ее можно начинать использовать.

Настраиваем в nano поддержку синтаксиса

Кстати писать в nano на C# сейчас не очень удобно без поддержки синтаксиса. Чтобы ее добавить можно зайти на github в репозиторий https://github.com/scopatz/nanorc и там есть инструкция по установке

запускаем

wget https://raw.githubusercontent.com/scopatz/nanorc/master/install.sh -O- | sh

и получаем

теперь если открыть файлик Program.cs то увидим

и давайте теперь еще настроим nano чтобы он при клику на TAB вставлял не табуляцию, а 4 пробела.

Для этого надо зайти в настройки nano. Nano хранит настройки в файлике ~/.nanorc, так что открываем его

скролим в файлике в самый низ и добавляем строки

set tabsize 4
set tabstospaces
set autoindent
set linenumbers

Работы с CommandLineParser

Работать с парсером очень легко

using System;
using CommandLine; // подключим либу

namespace application
{
    // создаем специальный класс
    public class Options {
        // в классе на каждый параметр командной строки, создаем свойство
        // на свойство навешиваем атрибут Option
        [Option('t', "show-two", HelpText="Если флаг указан, выводим по два числа")]
        public bool ShowTwo {get; set; }

        [Option('c', "count", Required=true)]
        public int Count {get; set;}
    }


    public class Program
    {
        static void Main(string[] args)
        {
            // потом пишем такую хитрую конструкцию
            Parser.Default.ParseArguments<Options>(args)
                .WithParsed<Options>(o => { // в которую передаем лямбду
                    // вот эта o -- это на самом деле экземпляр класса Options
                    // cо спарсеными значениями
                    for(var i=0; i<o.Count; ++i) {
                        if (o.ShowTwo) {
                            Console.WriteLine($"{i} {i + 1}");
                        } else {
                            Console.WriteLine(i);
                        }
                    }
                });
        }
    }
}

давайте попробуем запустить

Благодаря CommandLineParser автоматически создается справка для приложения с описанием всех параметров. Так как у нас параметр c – обязательный, то выводится сообщение что мы не указали count. Как же собственно передать этот параметр?

Так как мы запускаем приложение через утилиту dotnet то для того чтобы передать параметр надо написать

dotnet -- -c 10

проверяем:

Мы в принципе можем вызывать программу и напрямую и тогда не надо писать вот эти --

еще мы можем указывать параметр в виде полного написания (то которое мы указали вторым параметром в option)

ну и очевидно, что можно указывать несколько параметров. Вот так:

2.4

Разработать приложение на C# которое будет работать с аргументами командной строки и выдавать в консольку результат.

выбрать вариант