Ist es möglich, .NET-Code mit Mono auf dem Pi auszuführen?

41

Ist es möglich (und machbar), .NET-Anwendungen auf dem Raspberry Pi mit Mono auszuführen ?

Wenn ja, wie gut laufen sie? Ist eine grundlegende GUI verwendbar oder beschränkt sie eine schlechte Leistung realistisch auf Befehlszeilenanwendungen?

berry120
quelle
Vielleicht ist Portable.NET auch eine Option.
Der Hochstapler

Antworten:

25

Es gibt eine ganz ähnliche StackOverflow-Frage, Mono on Raspberry Pi . Durch meine eigenen Recherchen konnte ich jedoch nichts Spezielles für .NET finden, sondern nur C #.

Sie können die Laufzeit mit APT auf einer Debian-Distribution installieren, indem Sie Folgendes ausführen:

$ sudo apt-get install mono-runtime

Sie können auch (vorausgesetzt, Sie haben eine Art GUI wie LXDE) eine langsame Mono-IDE installieren mit:

$ sudo apt-get install monodevelop

Für Arch Linux ARM müssen Sie die Laufzeitumgebung wie folgt über Pacman installieren :

$ sudo pacman -S mono

Die Mono-IDE kann auf ähnliche Weise installiert werden:

$ sudo pacman -S monodevelop
Andrew Larsson
quelle
1
Was meinst du mit "eher zu nur C #"?
Jon Egerton
@ JonEgerton C # ist eine Sprache, während .NET ein Framework ist. Sie können mit C # für .NET Framework entwickeln, aber C # kann als eigenständige Programmiersprache verwendet werden. Ein aussagekräftigeres Beispiel könnte sein: Sie entwickeln für Android mit Java, aber Sie können ein Desktop-Programm mit Java schreiben. C # hängt nicht von .NET ab, aber .NET hängt von C # ab.
Andrew Larsson
Hi sorry, das habe ich nicht gemeint (ich bin ein .Net Entwickler !!). Es war eher die Exklusivität von C # und nicht die der anderen .net-Familiensprachen (vb.net, J # F # usw.). Ich habe noch nie in Mono geschaut und nicht bemerkt, dass es nur C # ist.
Jon Egerton
5
@Andrew Es ist umgekehrt: .NET ist nicht abhängig von C # - aber C # ist abhängig von einer Laufzeit wie .NET (oder Mono), es ist in der Praxis nie eine eigenständige Programmiersprache. Darüber hinaus ist Mono (wie auch .NET) völlig sprachunabhängig, sodass es auch hier nicht auf C # ankommt.
Konrad Rudolph
1
Installieren Sie MonoDeveloper nicht auf dem Gerät. Das ist zu langsam. Mounten Sie einfach ein Netzwerklaufwerk mit CIFS, kompilieren Sie es auf einem schnellen PC / MAC und testen Sie es über LAN.
BerggreenDK
8

Entgegen der weit verbreiteten Meinung läuft der von VB.NET kompilierte Code auf dem Raspberry Pi einwandfrei, zumindest unter Debian. apt-get installiere mono-vbnc und führe dann deine VB-exe als Argument für mono aus, zB mono yourexe.exe

Ich habe keine Leistungsbenchmarks durchgeführt, da ich keine leistungsintensive App schreibe, aber bisher in Ordnung zu sein scheint.

Kerl
quelle
Jede .NET-Sprache wird in denselben IL / Bytecode kompiliert. Sobald Sie also den Compiler auslösen (Mono-VBNC oder eine andere Sprache), ist Ihre VB verschwunden und die IL wird im RUNTIME-Kern verwendet.
BerggreenDK
6

.NET-Code, der .NET Framework-Bibliotheken verwendet, kann nicht auf Raspberry Pi ausgeführt werden, da für die Ausführung eine ARM-kompatible Version von NETMF oder CLR erforderlich ist . Microsoft hat Windows noch nicht auf ARM (WoA) veröffentlicht. In Experiment 19 erfahren Sie, wie Microsoft Research CLR mit ARM arbeitet.

Das Ausführen von .NET-Code (ohne Referenz oder mithilfe von .NET Framework-Bibliotheken) ist jedoch mit Mono möglich, da Mono über eine CLR für ARM-Geräte verfügt.

Weitere Informationen zu Windows unter ARM (WoA) finden Sie unter Erstellen von Windows für die ARM-Prozessorarchitektur .

JeeShen Lee
quelle
3
Ich denke deine Aussage ist hier falsch. Es ist möglich, eine .EXE-Datei, die auf einem PC kompiliert wurde, der .NET Framework-Klassen referenziert und verwendet (z. B. die Socket-Klasse oder die TcpListener-Klasse), zu kopieren, unverändert in das RPi zu kopieren und perfekt auf dem auszuführen RPi unter Mono. Dies liegt daran, dass Mono die meisten .NET Framework-Basisklassen durch eine eigene Version ersetzt, wobei exakt dieselben Namespaces, Typen und Schnittstellen verwendet werden.
dodgy_coder
4

Ich habe eine .NET-Kommandozeilenanwendung, um mit Mono zu arbeiten. Die App führt im Grunde genommen eine Art Port-Weiterleitung durch, wobei über den seriellen UART empfangene Daten über TCP / IP weitergeleitet werden. Es werden die Klassen SerialPort, TcpListener, TcpClient und Socket .NET verwendet, wobei nur geringfügige Änderungen am SerialPort-Verarbeitungscode erforderlich sind. Ich benutze das Debian-Soft-Float-Betriebssystem.

In Bezug auf die Leistung war das erste, was mir auffiel, eine erhebliche Verlangsamung bei einigen Debug- / Trace-Codes, bei denen ein Array von Bytes zu Protokollierungszwecken in eine Zeichenfolge formatiert wurde. Es war 50x langsamer als auf einem PC.

Daher würde ich empfehlen, einige Leistungstests zu schreiben, wenn Sie vorhandenen Code auf das RPi portieren.

Für Unit-Tests funktioniert NUnit auf dem RPi ...

So installieren Sie NUnit:

sudo apt-get install nunit

Zu rennen:

nunit-console appUnderTest.exe
dodgy_coder
quelle
1
Geschwindigkeit ist eine relative Sache. Ein Raspberry PI mit 1000 MHz (Modell 2) verhält sich jedoch ungefähr wie ein Pentium mit 300 MHz. Dies könnte erklären, warum .NET / MONO sich anfangs eher langsam anfühlt.
BerggreenDK