Raspberry PiにMonoをインストール
sudo apt update
sudo apt install mono-complete
mono-complete
はMonoランタイム+C#開発ツール一式です。
インストール確認
mono --version
NET Frameworkアプリ(.exe)の実行
Windowsでビルドした「.NET Framework(4.0~4.8)」のCUIアプリや簡単なWinFormsアプリは、Mono上で動作する場合があります。
WinFormsやWPFなどGUI系は完全互換ではありません。
CUIアプリ(コンソールアプリ)や、ファイル操作・通信などは比較的動作しやすいです。
実行できるアプリのポイント
- 動きやすい:
- .NET Framework 4.xでビルドした「コンソールアプリ」
- 外部ライブラリやWinAPIに依存しないもの
- 注意が必要:
- WinForms:シンプルなものなら動くこともある
- WPF:非対応
- Windows専用API(レジストリ操作、COMなど):動作不可
もしWindowsでVisual Studioからビルドしたexeを使う場合
- 依存DLLや設定ファイル(
app.config
など)も一緒にコピー - 32bitアプリ/64bitアプリで異常が出る場合は、
mono
のバージョンとアーキテクチャに注意
GUIアプリ(WinForms)
- 例えばForm1だけの超シンプルなアプリなら、動く場合もあります(ただし日本語入力やレイアウト崩れなど制限多め)
開発もMonoでやる場合
mcs MyApp.cs
mono MyApp.exe
でコンパイル・実行できます。
複数ファイルや外部ライブラリ利用も可能です。
よくある質問
- WinFormsアプリはMonoでラズパイ上で動きますか?
-
シンプルなWinFormsアプリは一部動作しますが、「日本語入力」「フォント」「コントロールのデザイン」「レイアウト」「マルチウィンドウ」などで表示崩れや動作不良が生じることがあります。
サポート外機能: 印刷・印影、ActiveX、DirectXなどを使うもの
推奨: WinForms必須の場合はAvaloniaなどクロスプラットフォームなGUIフレームワークへの移行を検討してください。
- WPF(Windows Presentation Foundation)アプリは動きますか?
-
動きません。
MonoはWPFを一切サポートしていません。WPFアプリの移植にはAvaloniaやMAUIなど代替UIフレームワークが必要です。
- コンソールアプリやCUIアプリは動きますか?
-
ほとんどの基本的なCUIアプリは動作します。
ただし、Windows専用APIやCOM/ActiveXを呼び出すものは動きません。
System.Console, ファイルIO, ネットワーク通信, 簡単なスレッド処理はほぼ問題なく動作します。
- TCP/UDP通信やHTTPクライアントは使えますか?
-
Monoは**.NET FrameworkのSystem.Net系APIに広く対応**しており、TCP/UDP/HTTP/FTPクライアント・サーバともに多くの場面で動作します。
ただし、SSL証明書周りのエラーや、OS依存のネットワーク設定には注意が必要です。
- ファイルの読み書きやディレクトリ操作は動作しますか?
-
基本的なファイル/ディレクトリ操作は問題なく動作します。
パス表記(/ vs \)、ファイル属性や権限などOS差異には注意してください。
- レジストリ操作やWindows API、Win32 DLL呼び出しは?
-
動作しません。
Linux上のMonoはレジストリやWin32APIをサポートしません。
代替方法(ファイル/環境変数/クロスプラットフォームAPI)を検討してください。
- .NET Coreや.NET 5/6/7/8アプリはMonoで動きますか?
-
動きません。
それらはMonoではなく「dotnetランタイム(.NET Runtime)」で実行してください。
- 日本語表示やマルチバイト文字は大丈夫?
-
基本的な表示は動作しますが、「フォントが不足」「表示が豆腐」「日本語入力未対応」など問題が発生しやすいです。
Linux上での日本語環境整備が必要です。
- GUIで画像描画やグラフ、カスタム描画は?
-
MonoのWinFormsは画像描画などの基本機能はサポートしていますが、高機能な描画(GDI+/DirectX/ハードウェアアクセラレーション)は非対応です。
- 外部DLLやネイティブライブラリとの連携は?
-
Linux用のsoライブラリ(.so)ならp/invokeで利用できますが、WindowsのDLLは不可です。
- サービス化(バックグラウンドで自動起動)は可能?
-
systemd
やinit.d
を使ってMonoアプリをサービス化可能です。
コメント