Mono и C# на Raspberry Pi: установка и примеры
Зачем использовать Mono на Raspberry Pi
Raspberry Pi может запускать полноценный дистрибутив Linux, поэтому он подходит для разработки приложений. Mono предоставляет компилятор C# и Common Language Runtime (CLR), что позволяет запускать .NET‑совместимые программы на Linux — в том числе на ARM‑платформах, таких как Pi.
Краткое определение: Mono — свободная реализация экосистемы .NET (ECMA), включающая компилятор C# и среду выполнения.
Что понадобится перед началом
- Raspberry Pi с установленным и обновлённым дистрибутивом (Raspberry Pi OS или совместимый). Убедитесь, что у вас запущен рабочий стол для GUI‑программ.
- Подключение к интернету для установки пакетов.
- Базовый опыт работы с терминалом и текстовым редактором (nano, vim и т. п.).
Важно: используйте sudo для установки системных пакетов. Выполнение команд без прав root приведёт к ошибкам.
Установка Mono
Откройте терминал и выполните команду установки полного набора Mono:
sudo apt-get update
sudo apt-get install mono-completeПакет mono-complete включает компилятор mcs, рантайм и стандартные библиотеки.
Компиляция и запуск простого консольного приложения
- Создайте файл hello.cs в любимом редакторе, например с nano:
nano hello.cs- Вставьте код программы:
using System;
public class HelloWorld
{
public static void Main()
{
Console.WriteLine("Hello Make Tech Easier");
}
}- Скомпилируйте программу:
mcs hello.cs- Посмотрите тип файла (опционально):
file hello.exeНа выходе вы увидите, что это сборка Mono/.NET. Хотя имя файла имеет расширение .exe, код внутри — промежуточный язык (IL), интерпретируемый CLR.
- Запустите программу через Mono:
mono hello.exeВы должны увидеть в терминале строку: Hello Make Tech Easier
Примечание: получившийся файл можно перенести на Windows‑ПК и запустить там, потому что .exe — контейнер совместимый с .NET.
Почему .exe работает на ARM и x86
.NET использует промежуточный язык (IL). Файл .exe содержит небольшой нативный загрузчик и IL‑код. При запуске runtime интерпретирует/компилирует IL в машинный код целевой архитектуры. Поэтому одна и та же сборка может работать на разных платформах при наличии CLR.
Создание простого GTK GUI приложения (gtk-sharp)
Если вы хотите окно с графическим интерфейсом, используйте биндинги gtk-sharp.
Установите биндинги:
sudo apt-get install gtk-sharp2Создайте файл hellogtk.cs:
using Gtk;
using System;
class Hello
{
public static void Main()
{
Application.Init();
Window window = new Window("Hello MTE");
window.Show();
Application.Run();
}
}Скомпилируйте с указанием pkg:
mcs hellogtk.cs -pkg:gtk-sharp-2.0Запустите полученную сборку из сессии рабочего стола:
mono hellogtk.exeЕсли рабочий стол не запущен (например, вы по SSH в текстовом режиме), окно не появится.

Небольшое окно появится с заголовком «Hello MTE». Это демонстрация того, что на Pi можно писать GUI‑приложения на C#.
Среда разработки: MonoDevelop
MonoDevelop — кроссплатформенная IDE для Mono, поддерживает создание десктопных и ASP.NET‑приложений. Устанавливается так:
sudo apt-get install monodevelop
MonoDevelop упрощает организацию проектов, рефакторинг и отладку. Однако на старых моделях Pi IDE может работать медленно; рассмотрите удалённую разработку с помощью SSH и редактора на мощном ПК.
Отладка и распространённые проблемы
- Проблема: команда не найдена для mcs/mono — проверьте, установлены ли пакеты и выполните apt-get update.
- Проблема: при запуске GUI никаких окон — убедитесь, что вы запускаете из сессии X (desktop), а не по SSH без X11 forwarding.
- Проблема: ошибки сборки GTK — проверьте наличие gtk-sharp2 и корректность флагов компиляции (-pkg:gtk-sharp-2.0).
- Устранение: используйте strace/ldd для диагностики отсутствующих зависимостей, и просмотрите вывод mono –debug при запуске.
Когда Mono не подходит (ограничения и альтернативы)
- Если вам нужна нативная производительность и предсказуемое использование памяти — рассмотрите компиляцию в нативный код (например, с помощью AOT у Mono или нативных компиляторов для C/C++).
- Современная альтернатива: официальные блочный релиз .NET (например, .NET 6/7) поддерживают ARM и Linux. Для новых проектов стоит сравнить поддержку и инструменты между Mono и .NET Runtime/SDK.
- Для веб‑серверов и микросервисов на Pi оцените влияние GC и потребление памяти.
Практические рекомендации и чек-лист перед выпуском
- Убедитесь, что runtime выбранной версии совместим с целевой версией .NET API.
- Тестируйте на той модели Pi, на которой будет работать приложение (ARMv6/v7/ARM64). Различия в архитектуре могут повлиять на зависимости.
- Для GUI: тестируйте в среде с реальным дисплеем и в режиме масштабирования экрана.
- Создавайте скрипт сборки и запуска (makefile или bash), чтобы облегчить развёртывание.
Чек‑лист для разработчика:
- Установлен mono-complete
- Установлены зависимости GTK (gtk-sharp2) для GUI
- Программа компилируется без ошибок mcs
- Программа запускается через mono на целевой Pi
- Проведены тесты на целевой платформе и в сценариях с низкими ресурсами
Краткая методология миграции проекта на Raspberry Pi
- Оцените зависимости и версии .NET API.
- Настройте среду сборки и CI с кросс‑компиляцией или сборкой непосредственно на Pi.
- Тестируйте функциональность и производительность.
- Оптимизируйте память и время запуска (включая AOT‑компиляцию при необходимости).
Краткий глоссарий (1‑строчное определение)
- CLR: среда выполнения Common Language Runtime, интерпретирует IL и управляет памятью.
- IL: промежуточный язык .NET, универсальный для разных архитектур.
- mcs: Mono C# compiler — компилятор C# в среде Mono.
- gtk-sharp: биндинги GTK для C# (позволяют создавать GUI).
Резюме
Mono даёт простой путь для запуска и разработки C#‑приложений на Raspberry Pi. Вы можете компилировать консольные программы и простые GTK‑GUI, использовать MonoDevelop для удобной разработки и прибегать к .NET Runtime как альтернативе для более новых проектов. Тестируйте на целевой модели Pi и следуйте чек‑листу перед развёртыванием.
Важно: если нужна высокая производительность или специфичные системные вызовы, рассмотрите нативные языки или современный .NET SDK с официальной поддержкой ARM.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента