Est-il possible d'exécuter du code .NET sur le Pi en mono?

41

Est-il possible (et réalisable) d'exécuter des applications .NET sur le Raspberry Pi avec Mono ?

Si oui, comment fonctionnent-ils? Une interface graphique de base est-elle utilisable ou une performance médiocre la limite-t-elle de manière réaliste aux applications en ligne de commande?

berry120
la source
Peut-être que Portable.NET est aussi une option.
Der Hochstapler

Réponses:

25

Il existe une question StackOverflow assez similaire à celle-ci, Mono sur Raspberry Pi . Cependant, mes propres recherches ne m'ont pas permis de trouver quoi que ce soit de spécifique à .NET, mais plutôt de C #.

Vous pouvez installer le runtime en utilisant APT sur une distribution Debian en exécutant:

$ sudo apt-get install mono-runtime

Vous pouvez également (en supposant que vous ayez une sorte d’interface graphique telle que LXDE) installer un IDE Mono lent avec:

$ sudo apt-get install monodevelop

Pour Arch Linux ARM, vous devez installer le runtime via Pacman , comme suit:

$ sudo pacman -S mono

Mono IDE peut être installé de la même manière:

$ sudo pacman -S monodevelop
Andrew Larsson
la source
1
Qu'entendez-vous par "plutôt que juste C #"?
Jon Egerton
@JonEgerton C # est un langage alors que .NET est un framework. Vous pouvez développer pour le framework .NET avec C #, mais C # peut être utilisé seul en tant que langage de programmation indépendant. Un exemple plus pertinent pourrait être: vous développez pour Android avec Java, mais vous pouvez écrire un programme de bureau avec Java. C # ne dépend pas de .NET, mais .NET dépend de C #.
Andrew Larsson
Bonjour désolé, ce n'est pas ce que je voulais dire (je suis un développeur .Net !!). C’était plus l’exclusivité de C # que les autres langues de la famille .net (vb.net, J # F #, etc.). Je n'ai jamais examiné Mono et je n'avais pas réalisé qu'il s'agissait uniquement de C #.
Jon Egerton
5
@Andrew C'est l'inverse: .NET ne dépend pas de C # - mais C # dépend d'un moteur d'exécution tel que .NET (ou Mono), ce n'est jamais un langage de programmation indépendant. De plus, mono est totalement agnostique au langage (tout comme .NET), donc encore une fois, il ne dépend pas de C #.
Konrad Rudolph
1
Ne pas installer MonoDeveloper sur le périphérique. C'est waaaay de ralentir. Montez simplement une clé réseau avec CIFS et compilez sur un PC / MAC rapide, puis testez-le sur un réseau local.
BerggreenDK
8

Contrairement à la croyance populaire, le code compilé par VB.NET fonctionne très bien sur Raspberry Pi, du moins sous Debian. apt-get installez mono-vbnc puis exécutez votre fichier exe VB en tant qu'argument pour mono, par exemple mono yourexe.exe

Je n'ai pas fait de référence en termes de performances, car je n'écris pas d'application à haute performance, mais cela semble aller jusqu'à présent.

Gars
la source
n'importe quel langage .NET est compilé dans le même IL / Bytecode, donc une fois que vous avez déclenché le compilateur (mono-vbnc ou quel que soit le langage), votre VB est parti et l'IL est utilisé dans le noyau RUNTIME.
BerggreenDK
6

Le code .NET qui utilise les bibliothèques .NET Framework ne peut pas s'exécuter sur Raspberry Pi car il nécessite une version compatible ARM de NETMF ou CLR . Pour l'instant, Microsoft n'a pas encore publié Windows on ARM (WoA). Reportez-vous à l' expérience 19 pour les travaux CLR de Microsoft Research sur ARM.

Toutefois, l’exécution de code .NET (sans référence ni utilisation de bibliothèques .NET Framework) est possible avec Mono car Mono a un CLR pour les périphériques ARM.

Voir également Construction de Windows pour l'architecture de processeur ARM pour plus d'informations sur Windows on ARM (WoA).

JeeShen Lee
la source
3
Je pense que votre déclaration est fausse ici. Il est possible de copier un fichier .EXE compilé sur le PC qui référence et utilise les classes du framework .NET (par exemple, la classe Socket ou la classe TcpListener, par exemple), de le copier sous forme inchangée dans le RPi et de le faire fonctionner parfaitement sur le RPi sous Mono. En effet, Mono remplace la plupart des classes de base du framework .NET par sa propre version, en utilisant exactement les mêmes espaces de noms, types et interfaces.
dodgy_coder
4

J'ai une application .NET en ligne de commande pour travailler avec Mono. En gros, l’application ressemble à une redirection de port, en prenant les données reçues via l’UART en série et en les transmettant via TCP / IP. Il utilise les classes .NET SerialPort, TcpListener, TcpClient et Socket. Seules des modifications mineures du code de traitement SerialPort sont nécessaires. J'utilise le système d'exploitation flottant de Debian.

En termes de performances, la première chose que j'ai constatée a été un ralentissement important du code de trace / débogage qui formait un tableau d'octets en une chaîne à des fins de journalisation. C'était 50 fois plus lent que sur un PC.

Je vous recommande donc d’écrire des tests de performance lorsque vous portez du code existant sur le RPi.

Pour les tests unitaires, NUnit fonctionne bien sur le ...

Pour installer NUnit:

sudo apt-get install nunit

Courir:

nunit-console appUnderTest.exe
dodgy_coder
la source
1
La vitesse est une chose relative. Mais un Raspberry PI fonctionnant à 1000 MHz (modèle 2) fonctionne à peu près comme un Pentium à 300 MHz, ce qui pourrait expliquer pourquoi .NET / MONO semble plutôt lent au début.
BerggreenDK