[.NET]RaspberryPiで.NETアプリケーションを実行する

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アプリの移植にはAvaloniaMAUIなど代替UIフレームワークが必要です。

コンソールアプリやCUIアプリは動きますか?

ほとんどの基本的なCUIアプリは動作します。

ただし、Windows専用APICOM/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は不可です。

サービス化(バックグラウンドで自動起動)は可能?

systemdinit.dを使ってMonoアプリをサービス化可能です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする