Создание первого приложения на .NET 5.0 в Visual Studio Code для ARM

В этой публикации вы узнаете, как создать первое консольное приложение на .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 

Windows x64: dotnet --info
D:\>dotnet --info
Пакет SDK для .NET (отражающий любой global.json):
Version: 5.0.103
Commit: 72dec52dbd

Среда выполнения:
OS Name: Windows
OS Version: 6.1.7601
OS Platform: Windows
RID: win7-x64
Base Path: C:\Program Files\dotnet\sdk\5.0.103\

Host (useful for support):
Version: 5.0.3
Commit: c636bbdc8a

.NET SDKs installed:
5.0.103 [C:\Program Files\dotnet\sdk]

.NET runtimes installed:
Microsoft.AspNetCore.All 2.1.11 [C:\Program Files\dotnet\shared\Microsoft.AspN
etCore.All]
....
Microsoft.WindowsDesktop.App 5.0.0-rc.2.20475.6 [C:\Program Files\dotnet\share
d\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 5.0.0 [C:\Program Files\dotnet\shared\Microsoft.W
indowsDesktop.App]
Microsoft.WindowsDesktop.App 5.0.3 [C:\Program Files\dotnet\shared\Microsoft.W
indowsDesktop.App]

To install additional .NET runtimes or SDKs:
https://aka.ms/dotnet-download

Visual Studio Code

Для загрузки Visual Studio Code перейдем на страницу загрузки и выберем нужный вариант пакета. Очень удобно использовать программы в виде .zip (VSCode-win32-x64-1.53.2.zip) архива, распаковал и запустил. После загрузки и распаковки архива в папку, запустим среду:  Code.exe .

Visual Studio Code
.NET Visual Studio Code ARM

Расширение поддержки 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)
.NET Visual Studio Code ARM

После установки можно выполнить настройку расширения:

.NET Visual Studio Code ARM

После установки расширения закроем Visual Studio Code, необходима перезагрузка.

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

Перейдем в папку с проектам \Projects\ и запустим командную строку. В командной стоке выполним команду:  dotnet new console -o СonsoleApp50 , где СonsoleApp50 — название нового проекта.

.NET Visual Studio Code ARM

После выполнения команды будет создана папка \Projects\СonsoleApp50\, в этой папке будет расположен наш проект: папка — obj, файл программы — Program.cs и файл проекта — СonsoleApp50.csproj.

Добавление логики в консольное приложение

Просто запустить «Hello World!» на платформе ARM не интересно, поэтому добавим дополнительную логику в  новое приложение. Приложение будет выводить информацию о системе в которой оно работает. Запустим Visual Studio Code и откроем папку с проектом \Projects\СonsoleApp50\.

Открытие проекта в Visual Studio Code
.NET Visual Studio Code ARM

Далее, откроем меню Terminal => New Terminal:

.NET Visual Studio Code ARM

Укажем команду сборки проекта:  dotnet build 

.NET Visual Studio Code ARM

Затем команду для запуска приложения:  dotnet run .

.NET Visual Studio Code ARM

Приложение работает.

В функцию 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.

Исключение: ошибка доступа к консоли
.NET Visual Studio Code ARM

Приложение выдало исключение, но не то, которое было запланированно. Ошибка заключается в невозможности чтения данных с консоли. Для решение проблемы необходимо изменить в файле \Projects\СonsoleApp50\.vscode\launch.json, конфигурации запуска проекта с «console»: «internalConsole» на «console»: «integratedTerminal».

.NET Visual Studio Code ARM

Снова запускаем проект, и переходим на закладку TERMINAL. Нажимаем «Y» и вызываем исключение.

В разделе Run => VARIABLES => Locals можно посмотреть текущее состояние переменных, так же при наведение указателя на переменную в коде, всплывает подсказка с содержанием переменной:

.NET Visual Studio Code ARM

Отлично, отладка работает!

Компиляция приложения под разные архитектуры

Компилирование выполняется из командной строки, командой  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 .

Выполним компиляцию под обе платформы:

.NET Visual Studio Code ARM

По пути \Projects\СonsoleApp50\bin\Debug\net5.0\ будут созданы две папки linux-arm и linux-arm64 для целевых платформ.

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

Скопируем папку linux-arm на плату Cubietruck, папку linux-arm64 на плату Banana Pi BPI-M64.

Запуск консольного приложения на Cubietruck

Скопируем содержимое папки \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

Скопируем содержимое папки \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!

Ссылки

Вам также может понравиться

About the Author: Anton

Programistik