.NET 策略目標之一是跨平台。Mono 是開源實作,讓 C#/.NET 程式在 Linux、macOS、Unix 執行。現今 .NET Core / .NET 5+ 已原生跨平台,Mono 仍用於 Unity、舊版 Xamarin、嵌入式場景。
# 1. 安裝相依套件 (以 CentOS/RHEL 為例)
yum install -y gcc make autoconf libtool gettext \
glib2-devel pkgconfig zlib-devel
# 2. 下載 Mono 原始碼
wget https://download.mono-project.com/sources/mono/mono-6.12.0.tar.xz
tar xf mono-6.12.0.tar.xz
cd mono-6.12.0
# 3. 編譯安裝
./configure --prefix=/usr/local
make -j$(nproc)
make install
# 4. 驗證
mono --VERSION
# Mono JIT compiler version 6.12.0 ...
現代 Linux 發布版可直接用套件管理器安裝:
# Ubuntu/Debian
apt update && apt install -y mono-complete
# CentOS/RHEL (需啟用 EPEL)
yum install -y epel-release && yum install -y mono-complete
# Arch
pacman -S mono
// Hello.cs
using System;
class Hello {
static void Main() {
Console.WriteLine("Hello Linux from C#!");
Console.WriteLine($"Runtime: {Environment.Version}");
Console.WriteLine($"OS: {Environment.OSVersion}");
}
}
# 編譯
mcs Hello.cs # 產生 Hello.exe (IL)
# 執行 (解譯器)
mint Hello.exe # 較慢,適合除錯
# 執行 (JIT 編譯器,預設)
mono Hello.exe # 生產環境用
| 面向 | Windows (.NET Framework) | Linux (Mono / .NET Core) |
|---|---|---|
| 路徑分隔符 | \ | / (用 Path.DirectorySeparatorChar) |
| 換行符 | \r\n | \n (用 Environment.NewLine) |
| 大小寫敏感 | 不敏感 | **敏感** (檔案系統、型別名稱) |
| 登錄表 | 有 | 無 (用設定檔/環境變數) |
| COM/ActiveX | 支援 | 不支援 |
| System.Drawing (GDI+) | 原生 | 需 libgdiplus,**建議改用 ImageSharp** |
| WPF/WinForms | 原生 | Mono 部分支援 WinForms,**建議遷移至 Avalonia / MAUI / Blazor** |
**新專案請直接使用 .NET 8+ SDK**,無需 Mono:
# 安裝 .NET 8 SDK (Microsoft 官方倉庫)
wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
dpkg -i packages-microsoft-prod.deb
apt update && apt install -y dotnet-sdk-8.0
# 建立專案
dotnet new console -n MyApp
cd MyApp
dotnet run
# 自動編譯、執行,原生 Linux 執行檔 (無需 mono)