¿Es posible ejecutar código .NET en Pi usando mono?

Respuestas:

25

Hay una pregunta de StackOverflow bastante similar a esta, Mono en Raspberry Pi . Sin embargo, a través de mi propia investigación, no he podido encontrar nada específico para .NET, sino solo C #.

Puede instalar el tiempo de ejecución usando APT en una distribución de Debian ejecutando:

$ sudo apt-get install mono-runtime

También puede (suponiendo que tenga algún tipo de GUI como LXDE) instalar un IDE Mono lento con:

$ sudo apt-get install monodevelop

Para Arch Linux ARM necesita instalar el tiempo de ejecución a través de Pacman , así:

$ sudo pacman -S mono

El Mono IDE se puede instalar de manera similar:

$ sudo pacman -S monodevelop
Andrew Larsson
fuente
1
¿Qué quieres decir con "en lugar de solo C #"?
Jon Egerton
@JonEgerton C # es un lenguaje mientras que .NET es un framework. Puede desarrollar para .NET Framework con C #, pero C # puede ser independiente como un lenguaje de programación independiente. Un ejemplo más fácil de relacionar podría ser: desarrollas para Android con Java, pero puedes escribir un programa de escritorio con Java. C # no depende de .NET, pero .NET depende de C #.
Andrew Larsson
Hola lo siento, eso no es lo que quise decir (¡soy un desarrollador de .Net!). Fue más la exclusividad de C # y no los otros lenguajes de familia .net (vb.net, J # F #, etc.). Nunca he mirado en Mono, y no me había dado cuenta de que es solo C #.
Jon Egerton
55
@ Andrew Es al revés: .NET no depende de C #, pero C # depende de un tiempo de ejecución como .NET (o Mono), nunca es en la práctica un lenguaje de programación independiente. Además, mono es totalmente independiente del lenguaje (como lo es .NET), por lo que una vez más no depende de C #.
Konrad Rudolph
1
No instale MonoDeveloper en el dispositivo. Eso es mucho más lento. Simplemente monte una unidad de red con CIFS y compile en una PC / MAC rápida y luego ejecute la prueba en LAN.
BerggreenDK
8

Contrariamente a la creencia popular, el código compilado de VB.NET funciona bien en Raspberry Pi, al menos en Debian. apt-get install mono-vbnc y luego ejecuta tu exe VB como argumento para mono, por ejemplo, mono yourexe.exe

No he hecho ningún punto de referencia de rendimiento ya que no estoy escribiendo una aplicación de rendimiento intensivo, pero hasta ahora parece estar bien.

Chico
fuente
cualquier lenguaje .NET se compila en el mismo IL / Bytecode, por lo que una vez que activa el compilador (mono-vbnc o cualquier idioma), su VB desaparece y el IL es lo que se usa en el núcleo RUNTIME.
BerggreenDK
6

El código .NET que usa las bibliotecas de .NET Framework no puede ejecutarse en Raspberry Pi ya que requiere una versión ARM compatible de NETMF o CLR para ejecutarse. A partir de ahora, Microsoft aún no ha lanzado Windows en ARM (WoA). Consulte el Experimento 19 para que Microsoft Research CLR funcione en ARM.

Sin embargo, es posible ejecutar código .NET (sin referencia o usar Bibliotecas Framework .NET) usando Mono ya que Mono tiene un CLR para dispositivos ARM.

Consulte también Creación de Windows para la arquitectura del procesador ARM para obtener información sobre Windows en ARM (WoA).

JeeShen Lee
fuente
3
Creo que tu declaración es incorrecta aquí. Es posible copiar un archivo .EXE que se compiló en la PC que hace referencia y usa clases de .NET framework (por ejemplo, la clase Socket o la clase TcpListener), cópielo sin cambios en el RPi y haga que se ejecute perfectamente en el RPi bajo Mono. Esto se debe a que Mono reemplaza la mayoría de las clases base de .NET Framework con su propia versión, utilizando exactamente los mismos espacios de nombres, tipos e interfaces.
dodgy_coder
4

Tengo una aplicación .NET de línea de comandos para trabajar con Mono. La aplicación básicamente está haciendo algo similar al reenvío de puertos, tomando los datos recibidos a través del UART serie y reenviándolos a través de TCP / IP. Utiliza las clases SerialPort, TcpListener, TcpClient y Socket .NET, con solo pequeños cambios necesarios en el código de manejo de SerialPort. Estoy usando el sistema operativo de flotación suave de Debian.

En términos de rendimiento, lo primero que encontré fueron algunas ralentizaciones significativas en algún código de depuración / rastreo que formateaba una matriz de bytes en una cadena para fines de registro. Fue 50 veces más lento en comparación con correr en una PC.

Por lo tanto, recomendaría escribir algunas pruebas de unidad de rendimiento al portar código existente al RPi.

Para pruebas unitarias, NUnit funciona bien en el RPi ...

Para instalar NUnit:

sudo apt-get install nunit

Correr:

nunit-console appUnderTest.exe
dodgy_coder
fuente
1
La velocidad es una cosa relativa. Pero un Raspberry PI que funciona a 1000 mhz (modelo 2) funciona aproximadamente como un Pentium 300 mhz, por lo que eso podría explicar por qué .NET / MONO se siente bastante lento para empezar.
BerggreenDK