Czy można uruchomić kod .NET na Pi przy użyciu mono?

Odpowiedzi:

25

Istnieje pytanie StackOverflow dość podobne do tego, Mono na Raspberry Pi . Jednak dzięki własnym badaniom nie udało mi się znaleźć niczego konkretnego dla platformy .NET, a jedynie C #.

Możesz zainstalować środowisko wykonawcze za pomocą APT na dystrybucji Debiana, wykonując:

$ sudo apt-get install mono-runtime

Możesz także (zakładając, że masz GUI, takie jak LXDE) zainstalować wolne Mono IDE z:

$ sudo apt-get install monodevelop

Dla Arch Linux ARM musisz zainstalować środowisko uruchomieniowe za pośrednictwem Pacmana , tak jak:

$ sudo pacman -S mono

Mono IDE można zainstalować w podobny sposób:

$ sudo pacman -S monodevelop
Andrew Larsson
źródło
1
Co rozumiesz przez „raczej po prostu C #”?
Jon Egerton
@JonEgerton C # to język, podczas gdy .NET to framework. Możesz tworzyć dla platformy .NET z C #, ale C # może być samodzielny jako niezależny język programowania. Bardziej odpowiednim przykładem może być: programujesz dla Androida z Javą, ale możesz napisać program komputerowy z Javą. C # nie zależy od .NET, ale .NET zależy od C #.
Andrew Larsson,
Cześć przepraszam, nie o to mi chodziło (jestem programistą .Net !!). To była bardziej wyłączność C #, a nie innych języków rodziny .net (vb.net, J # F # itp.). Nigdy nie patrzyłem na Mono i nie zdawałem sobie sprawy, że to tylko C #.
Jon Egerton,
5
@Andrew Odwrotnie: .NET nie zależy od C # - ale C # zależy od środowiska wykonawczego, takiego jak .NET (lub Mono), w praktyce nigdy nie jest niezależnym językiem programowania. Co więcej, mono jest całkowicie niezależne od języka (podobnie jak .NET), więc po raz kolejny nie zależy od C #.
Konrad Rudolph,
1
Nie instaluj MonoDeveloper na urządzeniu. To może spowolnić. Wystarczy podłączyć dysk sieciowy za pomocą CIFS i skompilować na szybkim komputerze PC / MAC, a następnie uruchomić w trybie testowym przez sieć LAN.
BerggreenDK
8

Wbrew powszechnemu przekonaniu kod skompilowany w VB.NET działa dobrze na Raspberry Pi, przynajmniej pod Debianem. apt-get zainstaluj mono-vbnc, a następnie uruchom exe VB jako argument mono, np. mono yourexe.exe

Nie wykonałem żadnych testów wydajności, ponieważ nie piszę aplikacji wymagającej dużej wydajności, ale jak dotąd wydaje się w porządku.

Chłopak
źródło
jakikolwiek język .NET kompiluje się w ten sam kod IL / Bytecode, więc po uruchomieniu kompilatora (mono-vbnc lub dowolny inny język), twój VB zniknie, a IL zostanie użyty w rdzeniu RUNTIME.
BerggreenDK
6

Kod .NET korzystający z bibliotek .NET Framework nie może działać na Raspberry Pi, ponieważ do działania wymaga wersji NETMF lub CLR kompatybilnej z ARM . Na razie Microsoft nie wydał jeszcze Windowsa na ARM (WoA). Zapoznaj się z eksperymentem 19 dotyczącym pracy Microsoft Research CLR na ARM.

Jednak uruchomienie kodu .NET (bez odwołania lub korzystania z bibliotek .NET Framework) jest możliwe przy użyciu Mono, ponieważ Mono ma CLR dla urządzeń ARM.

Zobacz także Budowanie systemu Windows dla architektury procesora ARM, aby uzyskać informacje o systemie Windows na ARM (WoA).

JeeShen Lee
źródło
3
Myślę, że twoje stwierdzenie jest tutaj błędne. Możliwe jest skopiowanie pliku .EXE, który został skompilowany na komputerze, który odwołuje się do klas środowiska .NET (np. Klasy Socket lub klasy TcpListener) i korzysta z nich, kopiuje go w niezmienionej postaci do RPi, i działa idealnie na RPi pod Mono. Wynika to z faktu, że Mono zastępuje większość klas podstawowych .NET Framework własną wersją, używając dokładnie tych samych przestrzeni nazw, typów i interfejsów.
dodgy_coder
4

Mam aplikację .NET z wierszem poleceń do pracy z Mono. Aplikacja zasadniczo robi coś podobnego do przekierowania portów, pobiera dane otrzymane przez szeregowy UART i przekazuje je przez TCP / IP. Wykorzystuje klasy SerialPort, TcpListener, TcpClient i Socket .NET, z niewielkimi zmianami wymaganymi w kodzie obsługi SerialPort. Używam miękkiego systemu operacyjnego Debian.

Jeśli chodzi o wydajność, pierwszą rzeczą, na którą natknąłem się, było znaczne spowolnienie w kodzie debugowania / śledzenia, który formatował tablicę bajtów w ciąg znaków do celów logowania. Było 50 razy wolniej w porównaniu do komputera.

Zalecam więc napisanie testów wydajności jednostek podczas przenoszenia istniejącego kodu na RPi.

Do testowania jednostkowego NUnit działa dobrze na RPi ...

Aby zainstalować NUnit:

sudo apt-get install nunit

Biegać:

nunit-console appUnderTest.exe
dodgy_coder
źródło
1
Szybkość jest względna. Ale Raspberry PI działający z częstotliwością 1000 MHz (model 2) działa w przybliżeniu jak Pentium 300 MHz, więc może to wyjaśniać, dlaczego .NET / MONO wydaje się dość powolny na początek.
BerggreenDK