С выходом .Net Core уже никого не удивить тем, что на C# можно разрабатывать под Linux. Хотите WebAPI на своём сервере в AWS? Пожалуйста! Консольную утилитку для собственных нужд? Без проблем. А что, если захотелось сделать приложение с графическим интерфейсом? Оказывается, что и это тоже можно и, более того, это не сложно. Под катом рассмотрим то, с чего начать разработку и структуру «Hello world» — проекта. Что-то своё сделаем в следующей части. Добро пожаловать.
Устанавливаем VS Code
Тут всё просто — загружаем Visual Studio Code .deb и устанавливаем. Поскольку мы собираемся использовать C# то после установки VS Code нам потребуется поставить соответствующее расширение.
Устанавливаем dotnet core
Для моей Ubuntu 19.04 я сделал следующее:
wget -q https://packages.microsoft.com/config/ubuntu/19.04/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt install apt-transport-https
sudo apt update
sudo apt install dotnet-sdk-2.2
После установки проверяем версию:
dotnet --version
Если версия появилась и она актуальная, то поздравляю — мы закончили с подготовкой и пора приступить к основной части. Если же у вас возникли проблемы, то более подробно об установке смотреть здесь.
Устанавливаем шаблон
Для того чтобы создать приложение нам нужно выполнить команду dotnet new, которая инициализирует проект или его часть и вызывает подсистему шаблонов, чтобы создать артефакты на диске на основе заданных параметров и шаблона. Нам необходим шаблон GtkSharp, который позволит нам создать проект со всеми необходимыми для простейшего приложение зависимостями.
Для его установки выполним команду:
dotnet new --install GtkSharp.Template.CSharp
Далее проверим список установленных проектов:
dotnet new -h
В списке установленных шаблонов должны появиться следующие:
- Gtk Application — создаёт Gtksharp проект
- Gtk Dialog — создаёт файлы диалога
- Gtk Widget — создаёт файлы виджета
- Gtk Windows — создаёт файлы окна
В этой части мы познакомимся с первым шаблоном, а остальные используем позже.
Создаём и запускаем проект
Для того чтобы создать проект вновь обратимся к консоли и выполним команду создания проекта:
dotnet new gtkapp
Обращу внимание, что в команде используется краткое имя, которое также увидеть в списке доступных шаблонов.
Откроем теперь созданный проект и увидим следующую картину:
Созданный проект можно сразу же запустить при помощи команд
dotnet build
dotnet run
Однако, каждый раз обращаться к консоли не слишком удобно и для того чтобы ограничиться нажатием Ctrl+F5 создадим конфигурацию и соответствующие таски.
Конфигурацию разместим в файле ~/{ProjectDir}/.vscode/launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": ".NET Core Launch (console)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/bin/Debug/netcoreapp2.0/.dll",
"args": [],
"cwd": "${workspaceFolder}",
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach",
"processId": "${command:pickProcess}"
}
]
}
Так же необходимо рядом создать таску для сборки в файле ~/{ProjectDir}/.vscode/launch.json:
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"command": "dotnet build",
"type": "shell",
"group": "build",
"presentation":
{
"reveal": "silent"
},
"problemMatcher": "$msCompile"
}
]
}
Теперь запустив наш проектик увидим следующую картину.
Ура! Работает!
Что есть что в проекте
Замечательно, теперь мы умеем в «Hello world»! Но для того, чтобы двигаться дальше, нужно разобраться что происходит и что за что отвечает. Как нетрудно догадаться ключевую роль играет библиотека gtk#.
Строго говоря, gtk# является wrapper’ом над gtk+, кроссплатформенным GUI фреймворком, который особенно известен в Linux, т.к. она является базисом для построения виджетов рабочей среды Gnome. Насколько мне известно он есть во многих Linux дистрибутивах, хорошо работает с Windows-системами. Так же важно понимать, что gtk# работает на любой .NET-совместимой среде — .Net Framework, .Net Core, Mono. Являясь ядром построения оконных и виджет систем gtk#, тем не менее не является единственной библиотекой позволяющей нам создать окошко.
Библиотека glade# наследует gtk# являясь подмножеством gtk# совместимой полностью с ней совместима, но при этом glade# ещё и автоматически компонует окна, диалоги и виджеты и сохраняет их как XML-файл с расширением .glade. Это экономит время за счет отсутствия необходимости написания программного кода для GUI и делает простым изменение интерфейса в будущем. Также можно рассматривать glade# оболочку для связи с libglade на языке C#. Но при этом glade# имеет ограничения, в частности, она не может выполнять некоторые специфичные вещи, к примеру, скрывать элементы. Тем не менее, можно создать GUI и без glade и лишь опыт поможет понять, что в конкретном случае лучше использовать.
А поскольку лучший способ набраться опыта — это практика, то в следующей части мы попробуем создать своё приложение.
P.S. Исходники вы можете найти на GitHub‘е