È possibile eseguire il codice .NET sul Pi usando mono?


Risposte:


25

C'è una domanda StackOverflow abbastanza simile a questa, Mono su Raspberry Pi . Tuttavia, attraverso le mie ricerche, non sono stato in grado di trovare nulla di specifico per .NET, ma piuttosto solo C #.

È possibile installare il runtime usando APT su una distro Debian eseguendo:

$ sudo apt-get install mono-runtime

Puoi anche (supponendo che tu abbia una sorta di GUI come LXDE) installare un IDE Mono lento con:

$ sudo apt-get install monodevelop

Per Arch Linux ARM è necessario installare il runtime tramite Pacman , in questo modo:

$ sudo pacman -S mono

L'IDE Mono può essere installato in modo simile:

$ sudo pacman -S monodevelop

1
Cosa intendi con "piuttosto che con C #"?
Jon Egerton,

@JonEgerton C # è un linguaggio mentre .NET è un framework. È possibile sviluppare per .NET framework con C #, ma C # può essere autonomo come linguaggio di programmazione indipendente. Un esempio più pertinente potrebbe essere: sviluppi per Android con Java, ma puoi scrivere un programma desktop con Java. C # non dipende da .NET, ma .NET dipende da C #.
Andrew Larsson,

Ciao scusa, non è quello che volevo dire (sono un dev .Net !!). Era più l'esclusività di C # e non le altre lingue della famiglia .net (vb.net, J # F # ecc.). Non ho mai guardato in Mono e non mi ero reso conto che fosse solo C #.
Jon Egerton,

5
@Andrew È il contrario: .NET non dipende da C # - ma C # dipende da un runtime come .NET (o Mono), non è mai in pratica un linguaggio di programmazione indipendente. Inoltre, mono è totalmente indipendente dal linguaggio (come lo è .NET), quindi ancora una volta non dipende da C #.
Konrad Rudolph,

1
Non installare MonoDeveloper sul dispositivo. Quello è waaaay per rallentare. Basta montare un drive di rete con CIFS e compilare su un PC / MAC veloce e quindi eseguire il test su LAN.
BerggreenDK,

8

Contrariamente alla credenza popolare, il codice compilato VB.NET funziona bene su Raspberry Pi, almeno sotto Debian. apt-get installa mono-vbnc e quindi esegui il tuo VB exe come argomento per mono, ad esempio mono yourexe.exe

Non ho fatto alcun benchmark delle prestazioni in quanto non sto scrivendo un'app ad alte prestazioni, ma finora sembra andare bene.


qualsiasi linguaggio .NET viene compilato nello stesso IL / Bytecode, quindi una volta attivato il compilatore (mono-vbnc o qualunque lingua), il VB scompare e l'IL è la cosa usata nel core RUNTIME.
BerggreenDK,

6

Il codice .NET che utilizza le librerie .NET Framework non può essere eseguito su Raspberry Pi poiché richiede l'esecuzione di una versione compatibile con ARM di NETMF o CLR . A partire da ora, Microsoft non ha ancora rilasciato Windows su ARM (WoA). Fare riferimento a Experiment 19 per Microsoft Research CLR funziona su ARM.

Tuttavia, è possibile eseguire il codice .NET (senza riferimento o utilizzare le librerie .NET Framework) utilizzando Mono poiché Mono ha un CLR per dispositivi ARM.

Vedere anche Creazione di Windows per l'architettura del processore ARM per informazioni su Windows su ARM (WoA).


3
Penso che la tua affermazione sia sbagliata qui. È possibile copiare un file .EXE che è stato compilato sul PC che fa riferimento e utilizza le classi .NET framework (ad esempio la classe Socket o TcpListener ad esempio), copiarlo invariato su RPi e farlo funzionare perfettamente sul RPi sotto Mono. Questo perché Mono sostituisce la maggior parte delle classi base di .NET framework con la propria versione, usando esattamente gli stessi spazi dei nomi, tipi e interfacce.
dodgy_coder l'

4

Ho un'applicazione .NET da riga di comando per lavorare con Mono. L'app sta fondamentalmente facendo qualcosa di simile al port forwarding, prendendo i dati ricevuti tramite l'UART seriale e inoltrandoli su TCP / IP. Utilizza le classi SerialPort, TcpListener, TcpClient e Socket .NET, con solo piccole modifiche necessarie al codice di gestione di SerialPort. Sto usando il sistema operativo Debian soft float.

In termini di prestazioni, la prima cosa che mi sono imbattuto sono stati alcuni rallentamenti significativi in ​​alcuni codici di debugging / trace che stavano formattando una matrice di byte in una stringa per scopi di registrazione. Era 50 volte più lento rispetto all'esecuzione su un PC.

Quindi consiglierei di scrivere alcuni test delle unità di prestazione quando si esegue il porting di codice esistente su RPi.

Per i test unitari, NUnit funziona perfettamente su RPi ...

Per installare NUnit:

sudo apt-get install nunit

Correre:

nunit-console appUnderTest.exe

1
La velocità è una cosa relativa. Ma un Raspberry PI funzionante a 1000 mhz (modello 2) funziona in modo simile a un Pentium 300 mhz, quindi ciò potrebbe spiegare perché .NET / MONO sembra piuttosto lento per iniziare.
BerggreenDK,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.