モノを使用してPiで.NETコードを実行することは可能ですか?


41

Monoを使用してRaspberry Piで.NETアプリケーションを実行することは可能ですか?

もしそうなら、彼らはどれくらいうまく走りますか?基本的なGUIは使用可能ですか、それともパフォーマンスの低下は現実的にコマンドラインアプリケーションに制限されていますか?


おそらくPortable.NETもオプションです。
デアホッホシュテープラー

回答:


25

Raspberry PiのMonoによく似たStackOverflowの質問があります。しかし、私自身の研究を通して、.NETに固有のものを見つけることはできませんでしたが、C#だけを見つけました。

以下を実行することにより、DebianディストリビューションでAPTを使用してランタイムをインストールできます。

$ sudo apt-get install mono-runtime

(LXDEなどのGUIを使用している場合)低速な Mono IDEをインストールすることもできます:

$ sudo apt-get install monodevelop

以下のためにアーチLinuxの ARMあなたは経由でランタイムをインストールする必要がパックマンそうのように、:

$ sudo pacman -S mono

Mono IDEも同様の方法でインストールできます。

$ sudo pacman -S monodevelop

1
「C#だけではなく」とはどういう意味ですか?
ジョンイガートン

@JonEgerton C#は言語ですが、.NETはフレームワークです。C#を使用して.NETフレームワーク用に開発できますが、C#は独立したプログラミング言語として単独で使用できます。より関連性の高い例としては、Javaを使用してAndroid用に開発しますが、Javaを使用してデスクトッププログラムを作成できます。C#は.NETに依存しませんが、.NETはC#に依存します。
アンドリューラーソン

こんにちは、申し訳ありませんが、それは私が意図したものではありません(私は.Net開発者です!!)。それは、他の.netファミリー言語(vb.net、J#F#など)ではなく、C#の排他性でした。私はこれまでMonoを検討したことがなく、C#のみに気付いていませんでした。
ジョンエガートン

5
@Andrewそれは逆です。.NETはC#に依存しませんが、C#は.NET(またはMono)などのランタイムに依存します。実際には独立したプログラミング言語ではありません。さらに、monoは完全に言語に依存しないため(.NETと同様)、C#に依存しません。
コンラッドルドルフ

1
MonoDeveloperをデバイスにインストールしないでください。遅くなります。ネットワークドライブをCIFSでマウントし、高速のPC / MACでコンパイルしてから、LANでテスト実行するだけです。
BerggreenDK

8

一般的な考えに反して、VB.NETでコンパイルされたコードは、少なくともDebianの下ではRaspberry Piで正常に動作します。apt-get mono-vbncをインストールしてから、VB exeをmonoの引数として実行します(例:mono yourexe.exe)

パフォーマンス集約型のアプリを書いているわけではないので、パフォーマンスベンチマークは行っていませんが、これまでのところは問題ないようです。


.NET言語はすべて同じIL /バイトコードにコンパイルされるため、コンパイラー(mono-vbncまたは任意の言語)をトリガーすると、VBはなくなり、ILはRUNTIMEコアで使用されます。
BerggreenDK

6

.NET Frameworkライブラリを使用している.NETコードは、Raspberry Piで実行できません。ARM互換バージョンのNETMFまたはCLRを実行する必要があるためです。現在のところ、MicrosoftはまだARM(WoA)でWindowsをリリースしていません。ARMで動作するMicrosoft Research CLRについては、実験19を参照してください。

ただし、MonoにはARMデバイス用のCLRがあるため、Monoを使用して.NETコードを(参照なしで、または.NET Frameworkライブラリを使用して)実行できます。

ARM on Windows(WoA)については、ARMプロセッサアーキテクチャ向けのWindowsのビルドも参照してください。


3
ここであなたの発言は間違っていると思います。.NETフレームワーククラス(たとえば、SocketクラスまたはTcpListenerクラス)を参照および使用するPCでコンパイルされた.EXEファイルをコピーし、変更せずにRPiにコピーして、完全に実行することができます。モノの下のRPi。これは、Monoがほとんどの.NETフレームワークの基本クラスを独自のバージョンで置き換え、まったく同じ名前空間、型、およびインターフェイスを使用しているためです。
dodgy_coder

4

Monoで動作するコマンドライン.NETアプリケーションがあります。このアプリは基本的に、ポートフォワーディングに似た処理を行い、シリアルUART経由で受信したデータを取得して、TCP / IP経由で転送します。SerialPort、TcpListener、TcpClient、およびSocket .NETクラスを使用し、SerialPort処理コードにわずかな変更を加えるだけです。DebianソフトフロートOSを使用しています。

パフォーマンスに関しては、最初に遭遇したのは、ロギングの目的でバイト配列を文字列にフォーマットするデバッグ/トレースコードの大幅なスローダウンでした。PCでの実行に比べて50倍遅くなりました。

そのため、既存のコードをRPiに移植するときに、いくつかのパフォーマンスユニットテストを作成することをお勧めします。

ユニットテストの場合、NUnitはRPiで正常に動作します...

NUnitをインストールするには:

sudo apt-get install nunit

走る:

nunit-console appUnderTest.exe

1
速度は相対的なものです。しかし、1000 mhz(モデル2)で実行されるRaspberry PIは、Pentium 300 mhzとほぼ同等のパフォーマンスを発揮するため、.NET / MONOの起動がかなり遅いと感じる理由を説明できるかもしれません。
BerggreenDK
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.