В этой публикации вы узнаете, как создать первое консольное приложение на .NET 5.0 в Visual Studio Code, затем его скомпилировать для различных платформ(ARM32, ARM64), с дальнейшем запуском на платах Banana Pi BPI-M64 и Cubietruck.
Visual Studio Code
Visual Studio Code — редактор исходного кода, разработанный Microsoft для Windows, Linux и macOS. Позиционируется как «лёгкий» редактор кода для кроссплатформенной разработки веб- и облачных приложений. Включает в себя отладчик, инструменты для работы с Git, подсветку синтаксиса, IntelliSense и средства для рефакторинга. Имеет широкие возможности для кастомизации: пользовательские темы, сочетания клавиш и файлы конфигурации. Распространяется бесплатно, разрабатывается как программное обеспечение с открытым исходным кодом, но готовые сборки распространяются под проприетарной лицензией. Многие возможности Visual Studio Code недоступны через графический интерфейс, зачастую они используются с помощью различных команд или JSON-файлы (например, пользовательские настройки).
Существуют сборки для ОС:
- Windows(64-bit,32-bit,ARM)
- Debian(64-bit,32-bit,ARM)
- Ubuntu(64-bit,32-bit,ARM)
- macOS10.10+
Загрузка Visual Studio Code доступна по ссылке.
Установка SDK .NET, Visual Studio Code и расширения поддержки C#
SDK .NET 5.0
Первым делом необходимо установить SDK .NET 5.0. Перейдем на страницу Download .NET 5.0, выберем SDK 5.0.103 => Installers => x64 (для Windows x64). Загрузим пакет и установим.
После установки откроем командную строку, кнопка «Пуск», пункт меню «Выполнить» команда CMD , укажем команду: dotnet —info
Visual Studio Code
Для загрузки Visual Studio Code перейдем на страницу загрузки и выберем нужный вариант пакета. Очень удобно использовать программы в виде .zip (VSCode-win32-x64-1.53.2.zip) архива, распаковал и запустил. После загрузки и распаковки архива в папку, запустим среду: Code.exe .
Расширение поддержки C#
Установим расширение C# for Visual Studio Code (powered by OmniSharp). Для этого нажмем на закладке: 1. Extensions, затем 2. в поле ввода напишем название расширения C# for Visual Studio Code, выберем пункт 3. C# for Visual Studio Code (powered by OmniSharp). 4. Перейдем на страницу описание расширения и нажмем на кнопку Install.
C# for Visual Studio Code (powered by OmniSharp)
После установки можно выполнить настройку расширения:
После установки расширения закроем Visual Studio Code, необходима перезагрузка.
Создание консольного приложения
Перейдем в папку с проектам \Projects\ и запустим командную строку. В командной стоке выполним команду: dotnet new console -o СonsoleApp50 , где СonsoleApp50 — название нового проекта.
После выполнения команды будет создана папка \Projects\СonsoleApp50\, в этой папке будет расположен наш проект: папка — obj, файл программы — Program.cs и файл проекта — СonsoleApp50.csproj.
Добавление логики в консольное приложение
Просто запустить «Hello World!» на платформе ARM не интересно, поэтому добавим дополнительную логику в новое приложение. Приложение будет выводить информацию о системе в которой оно работает. Запустим Visual Studio Code и откроем папку с проектом \Projects\СonsoleApp50\.
Открытие проекта в Visual Studio Code
Далее, откроем меню Terminal => New Terminal:
Укажем команду сборки проекта: dotnet build
Затем команду для запуска приложения: dotnet run .
Приложение работает.
В функцию Main() поместим следующий код с вызовом исключения для проверки режима отладки (проект СonsoleApp50 на GitHub):
static void Main(string[] args) { Console.WriteLine("Test .NET console application!"); var str_Framework=RuntimeInformation.FrameworkDescription; var str_OSArch=RuntimeInformation.OSArchitecture.ToString(); var str_OSDesc= RuntimeInformation.OSDescription; var str_OSIdent=RuntimeInformation.RuntimeIdentifier; //output Console.WriteLine($"Версия .NET: {str_Framework}"); Console.WriteLine($"Архитектура ОС: {str_OSArch}"); Console.WriteLine($"Версия ОС: {str_OSDesc}"); Console.WriteLine($"Идентификатор ОС: {str_OSIdent}"); //error Console.WriteLine("Генерировать исключение [yes/No]? "); var input_key=Console.ReadKey().Key; Console.Write("\n"); if (input_key==ConsoleKey.Y) { Console.Write("Генерация исключения"); throw new Exception("А вот и ошибочка!"); } Console.WriteLine("Завершение работы программы"); }
Запустим проект, меню Run => Start Debugging.
Исключение: ошибка доступа к консоли
Приложение выдало исключение, но не то, которое было запланированно. Ошибка заключается в невозможности чтения данных с консоли. Для решение проблемы необходимо изменить в файле \Projects\СonsoleApp50\.vscode\launch.json, конфигурации запуска проекта с «console»: «internalConsole» на «console»: «integratedTerminal».
Снова запускаем проект, и переходим на закладку TERMINAL. Нажимаем «Y» и вызываем исключение.
В разделе Run => VARIABLES => Locals можно посмотреть текущее состояние переменных, так же при наведение указателя на переменную в коде, всплывает подсказка с содержанием переменной:
Отлично, отладка работает!
Компиляция приложения под разные архитектуры
Компилирование выполняется из командной строки, командой dotnet build , необходимые архитектуры задаются ключами. В .NET существуют константы для обозначения архитектуры исполнения Runtime Identifiers (RIDs). Из каталога нам потребуются идентификаторы:
- linux-arm — архитектура ARM32, для запуска приложения на Cubietruck.
- linux-arm64 — архитектура ARM64, для запуска приложения на Banana Pi BPI-M64.
Итоговый вариант команды будет выглядеть так: dotnet build -r linux-arm и dotnet build -r linux-arm64 .
Выполним компиляцию под обе платформы:
По пути \Projects\СonsoleApp50\bin\Debug\net5.0\ будут созданы две папки linux-arm и linux-arm64 для целевых платформ.
Воспользуемся бесплатным терминалом MobaXterm для копирования приложения на платы. Терминал MobaXterm — позволяет переносить целиком папку и выборочно файлы, существенно удобнее в работе по сравнению с PuTTY терминалом.
Скопируем папку linux-arm на плату Cubietruck, папку linux-arm64 на плату Banana Pi BPI-M64.
Запуск консольного приложения на Cubietruck
Для запуска .NET приложений на Cubietruck необходимо установить .NET Runtime, как это сделать в публикации — Установка .NET 5.0 для ARM на примере Banana Pi BPI-M64 и Cubietruck (Armbian, Linux). Скопируем содержимое папки \Projects\СonsoleApp50\bin\Debug\net5.0\linux-arm на Cubietruck по пути /root/linux-arm, зайдем в папку linux-arm и выполним команду: dotnet СonsoleApp50.dll .
Результат работы консольного приложения:
root@cubietruck:~/linux-arm# dotnet СonsoleApp50.dll Test .NET console application! Версия .NET: .NET 5.0.3 Архитектура ОС: Arm Версия ОС: Linux 5.10.12-sunxi #21.02.1 SMP Wed Feb 3 20:39:30 CET 2021 Идентификатор ОС: ubuntu.20.04-arm Генерировать исключение [yes/No]? n Завершение работы программы
Запуск консольного приложения на Banana Pi BPI-M64
Для запуска .NET приложений на Banana Pi BPI-M64 необходимо установить .NET Runtime, как это сделать в публикации — Установка .NET 5.0 для ARM на примере Banana Pi BPI-M64 и Cubietruck (Armbian, Linux). Скопируем содержимое папки \Projects\СonsoleApp50\bin\Debug\net5.0\linux-arm64 на Banana Pi BPI-M64 по пути /root/linux-arm64, зайдем в папку linux-arm64 и выполним команду: dotnet СonsoleApp50.dll
Результат работы консольного приложения:
root@bananapim64:~/linux-arm64# dotnet СonsoleApp50.dll Test .NET console application! Версия .NET: .NET 5.0.3 Архитектура ОС: Arm64 Версия ОС: Linux 5.8.6-sunxi64 #20.08.2 SMP Fri Sep 4 08:52:31 CEST 2020 Идентификатор ОС: ubuntu.18.04-arm64 Генерировать исключение [yes/No]? Завершение работы программы
Приложения разработанные на .NET 5.0 успешно работают на архитектуре ARM32 и ARM64!
Литература
- .NET RID Catalog — .NET fundamentals
- Tutorial: Create a .NET console application using Visual Studio Code — .NET fundamentals
- .NET 5 – How to start — Michal Bialecki Blog
- Download Visual Studio Code
- dotnet build — Builds a project and all of its dependencies. — .NET fundamentals
- dotnet run — Runs source code without any explicit compile or launch commands.. — .NET fundamentals
- Visual Studio Code — Wikipedia
- C# for Visual Studio Code (powered by OmniSharp) — Visual Studio Code
- ReadKey not working in .net core — Stack Overflow
- Console (terminal) window — github.com/OmniSharp
- Проект СonsoleApp50 на GitHub
- Терминал Mobatek MobaXterm Home Edition (Free) — Download Page