Гид по технологиям

Mono и C# на Raspberry Pi: установка и примеры

• 5 min read • Разработка • Обновлено 24 Nov 2025
Mono и C# на Raspberry Pi: установка и примеры
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, рантайм и стандартные библиотеки.

Компиляция и запуск простого консольного приложения

  1. Создайте файл hello.cs в любимом редакторе, например с nano:
nano hello.cs
  1. Вставьте код программы:
using System;

public class HelloWorld
{
    public static void Main()
    {
        Console.WriteLine("Hello Make Tech Easier");
    }
}
  1. Скомпилируйте программу:
mcs hello.cs
  1. Посмотрите тип файла (опционально):
file hello.exe

На выходе вы увидите, что это сборка Mono/.NET. Хотя имя файла имеет расширение .exe, код внутри — промежуточный язык (IL), интерпретируемый CLR.

  1. Запустите программу через 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 на Raspberry Pi

Небольшое окно появится с заголовком «Hello MTE». Это демонстрация того, что на Pi можно писать GUI‑приложения на C#.

Среда разработки: MonoDevelop

MonoDevelop — кроссплатформенная IDE для Mono, поддерживает создание десктопных и ASP.NET‑приложений. Устанавливается так:

sudo apt-get install monodevelop

MonoDevelop IDE на Raspberry Pi

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

  1. Оцените зависимости и версии .NET API.
  2. Настройте среду сборки и CI с кросс‑компиляцией или сборкой непосредственно на Pi.
  3. Тестируйте функциональность и производительность.
  4. Оптимизируйте память и время запуска (включая 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.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро