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

Установка Mono на Ubuntu 22.04 — пошаговое руководство

• 5 min read • Разработка • Обновлено 28 Nov 2025
Установка Mono на Ubuntu 22.04
Установка Mono на Ubuntu 22.04

Требования

  • Ubuntu 22.04 — Desktop или Server.
  • Непривилегированный пользователь с правами sudo.

Что такое Mono

Mono — это свободная реализация фреймворка .NET и исполняющей среды Common Language Runtime. Она позволяет запускать приложения на C# и других CLR-языках на Linux, Windows, macOS и встраиваемых системах.

Добавление репозитория Mono

Для установки Mono мы будем использовать официальный репозиторий проекта и пакетный менеджер APT.

  1. Установите пакеты для работы с сертификатами и ключами:
sudo apt install ca-certificates gnupg

При появлении подсказки подтвердите установку, введя y и нажав ENTER.

Установка пакетов ca-certificates и gnupg

  1. Добавьте GPG-ключ Mono в локальное хранилище ключей:
sudo gpg --homedir /tmp --no-default-keyring \
--keyring /usr/share/keyrings/mono-official-archive-keyring.gpg \
--keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF

Добавление GPG-ключа Mono

  1. Добавьте официальный репозиторий Mono в списки APT:
echo \
"deb [signed-by=/usr/share/keyrings/mono-official-archive-keyring.gpg] https://download.mono-project.com/repo/ubuntu stable-focal main" | \
sudo tee /etc/apt/sources.list.d/mono-official-stable.list
  1. Обновите индексы пакетов:
sudo apt update

В выводе вы должны увидеть, что добавлен репозиторий Mono.

Обновление списков пакетов APT

Установка Mono на Ubuntu

  1. Просмотрите доступные пакеты Mono через поиск APT:
sudo apt search mono-*

Обратите внимание на ключевые пакеты:

  • mono-devel — инструменты для компиляции приложений .NET.
  • mono-complete — полный набор пакетов для разработки и запуска приложений Mono.

Перечень пакетов Mono

  1. Установите комплект для разработки и отладки. В примере установлены mono-complete и mono-dbg:
sudo apt install mono-complete mono-dbg

Подтвердите установку, введя y и нажав ENTER.

Установка Mono на Ubuntu

  1. Проверьте версию установленного Mono:
mono -V

В примере вывод показывает Mono 6.12 (версия зависит от репозитория в момент установки).

Проверка версии Mono

Создание консольного Hello-World с Mono

Теперь, когда mono-complete установлен, можно писать и запускать приложения.

  1. Создайте файл исходного кода (в примере используется vim):
vim hello-mono.cs

Вставьте следующий код в файл:

using System;  
  
public class HelloWorld  
{  
    public static void Main(string[] args)  
    {  
        Console.WriteLine ("Hello Mono World");  
    }  
}
  1. Сохраните и закройте файл.

  2. Скомпилируйте с помощью компилятора csc. В результате появится исполняемый файл hello-mono.exe:

csc hello-mono.cs
  1. Запустите собранный exe через Mono:
mono hello-mono.exe

Вы должны увидеть строку “Hello Mono World” в терминале.

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

Создание простого ASP.NET-приложения с Mono

Mono позволяет запускать старые ASP.NET WebForms-приложения через xsp4 (веб-сервер для Mono).

  1. Создайте файл hello-world.aspx:
vim hello-world.aspx

Добавьте в него следующий код:

<%@ Page Language="C#" %>  
  
  
   Sample Calendar  
  
  
  1. Запустите встроенный сервер XSP на порту 9000:
xsp4 --port 9000

Приложение будет доступно по адресу http://localhost:9000/hello-world.aspx

Запуск ASP.NET-приложения на Mono

Откройте браузер и перейдите по адресу выше, чтобы увидеть страницу с контролом Calendar.

Страница ASP.NET, запущенная через Mono

Чтобы остановить сервер, нажмите ENTER в терминале или Ctrl+C.

Критерии приёмки

  • Mono успешно установлен и команда mono -V возвращает версию.
  • csc компилирует hello-mono.cs в hello-mono.exe без ошибок.
  • mono hello-mono.exe выводит “Hello Mono World”.
  • xsp4 запускает ASP.NET-страницу и она доступна в браузере по http://localhost:9000/hello-world.aspx.

Частые проблемы и отладка

  • Проблема: APT не находит репозиторий.

    • Проверьте, что файл /etc/apt/sources.list.d/mono-official-stable.list создан и содержит правильную строку.
    • Проверьте, что GPG-ключ корректно добавлен в /usr/share/keyrings/.
  • Проблема: Невозможно получить ключ с keyserver. Попробуйте повторить команду позднее или использовать другой keyserver.

  • Проблема: Ошибки компиляции с csc.

    • Убедитесь, что установлен пакет mono-devel или mono-complete.
    • Проверьте код на синтаксические ошибки и правильность escape-символов в строках.
  • Проблема: xsp4 не запускается или порт занят.

    • Убедитесь, что порт 9000 свободен: sudo lsof -i :9000
    • Попробуйте другой порт: xsp4 –port 8080

Чек-листы по ролям

Разработчик:

  • Установить mono-complete.
  • Скомпилировать и запустить тестовое консольное приложение.
  • Проверить поведение целевого приложения и зависимости NuGet/assembly.

Системный администратор:

  • Добавить репозиторий и GPG-ключ в систему.
  • Настроить службу systemd для xsp4 (если нужен постоянный сервис).
  • Открыть необходимые порты в брандмауэре (например, 9000).

Оценщик безопасности:

  • Проверить права доступа к сертификатам и файлам ключей.
  • Ограничить доступ к административным файлам репозитория.

Альтернативные подходы

  • Установка через пакеты дистрибутива: некоторые версии Ubuntu содержат пакеты Mono в официальных репозиториях. Это проще, но версии могут быть устаревшими.

  • Использование Docker-контейнера с Mono: удобно для изоляции и тестирования приложений без изменения хоста.

  • Миграция на современный .NET (например, .NET 6/7/8): рекомендуется для новых проектов. Mono больше подходит для поддержки существующих приложений, написанных для .NET Framework.

Когда Mono не подходит (контрпример)

  • Если проект использует современные SDK и целится на кроссплатформенные контейнеры, лучше использовать .NET (Core/5+/6/7/8). Mono чаще выбирают для поддержки старых ASP.NET WebForms или специфичных библиотек, несовместимых с .NET Core.

Модель принятия решения (простая эвристика)

  • Требуется поддержка старого .NET Framework или WebForms -> выбрать Mono.
  • Новый проект или переносимый сервис -> выбрать .NET 6/7/8.

Факт-бокс

  • Тестовая система в руководстве: Ubuntu 22.04.
  • Пример версии Mono в выводе: 6.12 (зависит от репозитория).
  • Порт по умолчанию в примере для xsp4: 9000.

Рекомендации по безопасности

  • Не запускайте xsp4 на публичных интерфейсах без обратного прокси и HTTPS.
  • Для production-использования организуйте обратный прокси (nginx/apache) и TLS-терминацию.
  • Ограничьте доступ к /usr/share/keyrings/ и файлам конфигурации.

Миграция: базовые советы

  • Оцените зависимости проекта: если применяется много старых API и WebForms, миграция сложнее.
  • Для библиотек с чистым кодом рассмотрите перенос на .NET Standard, затем на .NET 6+.
  • Тестируйте в контейнере до переноса в продакшен.

Краткий глоссарий

  • Mono — свободная реализация .NET Framework.
  • csc — C# компилятор (складывает .exe/.dll для CLR).
  • xsp4 — минимальный веб-сервер для ASP.NET под Mono.

Заключение

В этом руководстве вы добавили официальный репозиторий Mono, установили mono-complete, собрали и запустили консольное приложение и простое ASP.NET-приложение на Ubuntu 22.04. Дальше можно настроить IDE (Visual Studio Code, MonoDevelop или другие), настроить CI/CD и, при необходимости, рассмотреть миграцию на современные версии .NET.

Важно: для продакшен-сред используйте обратный прокси, TLS и ограничьте сетевой доступ к внутренним портам.

Поделиться: 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 быстро