É possível executar o código .NET no Pi usando mono?

Respostas:

25

Há uma pergunta StackOverflow bastante semelhante a esta, Mono no Raspberry Pi . No entanto, por meio de minha própria pesquisa, não consegui encontrar nada específico para o .NET, mas apenas o C #.

Você pode instalar o tempo de execução usando o APT em uma distribuição Debian executando:

$ sudo apt-get install mono-runtime

Você também pode (supondo que você tenha algum tipo de GUI, como o LXDE) instalar um IDE Mono lento com:

$ sudo apt-get install monodevelop

Para o Arch Linux ARM, você precisa instalar o tempo de execução via Pacman , da seguinte forma:

$ sudo pacman -S mono

O IDE Mono pode ser instalado de maneira semelhante:

$ sudo pacman -S monodevelop
Andrew Larsson
fonte
1
O que você quer dizer com "em vez de apenas C #"?
Jon Egerton
@ JonEgerton C # é uma linguagem enquanto .NET é uma estrutura. Você pode desenvolver para a estrutura .NET com C #, mas o C # pode ficar sozinho como uma linguagem de programação independente. Um exemplo mais compreensível pode ser: você desenvolve para Android com Java, mas pode escrever um programa de desktop com Java. C # não depende do .NET, mas o .NET depende do C #.
Andrew Larsson
Oi desculpe, não foi isso que eu quis dizer (eu sou um .Net dev !!). Era mais a exclusividade do C # e não os outros idiomas da família .net (vb.net, J # F # etc). Eu nunca procurei no Mono e não tinha percebido que é apenas C #.
21416 Jon Egerton
5
@ Andrew É o contrário: o .NET não depende de C # - mas o C # depende de um tempo de execução como o .NET (ou Mono), nunca na prática é uma linguagem de programação independente. Além disso, mono é totalmente independente de idioma (como é o .NET), portanto, mais uma vez, não depende de C #.
quer tocar hoje
1
Não instale o MonoDeveloper no dispositivo. Isso é muito lento. Basta montar um drive de rede com CIFS e compilar em um PC / MAC rápido e executar o teste na LAN.
precisa
8

Contrariamente à crença popular, o código compilado do VB.NET funciona bem no Raspberry Pi, pelo menos no Debian. apt-get install mono-vbnc e execute o seu VB exe como um argumento para mono, por exemplo, mono yourexe.exe

Não fiz nenhum benchmark de desempenho, pois não estou escrevendo um aplicativo com alto desempenho, mas parece estar bom até agora.

Cara
fonte
qualquer linguagem .NET é compilada no mesmo IL / Bytecode, portanto, quando você aciona o compilador (mono-vbnc ou qualquer outro idioma), seu VB desaparece e o IL é o que é usado no núcleo RUNTIME.
precisa
6

O código .NET que está usando bibliotecas do .NET Framework não pode ser executado no Raspberry Pi, pois requer uma versão compatível com ARM do NETMF ou CLR para ser executada. A partir de agora, a Microsoft ainda não lançou o Windows no ARM (WoA). Consulte a Experiência 19 para obter informações sobre o Microsoft Research CLR no ARM.

No entanto, é possível executar o código .NET (sem referência ou usando as Bibliotecas do .NET Framework) usando o Mono, pois o Mono possui um CLR para dispositivos ARM.

Consulte também Criando o Windows para a arquitetura do processador ARM para obter informações sobre o Windows no ARM (WoA).

JeeShen Lee
fonte
3
Acho que sua afirmação está errada aqui. É possível copiar um arquivo .EXE que foi compilado no PC que faz referência e usa as classes do .NET framework (por exemplo, a classe Socket ou a classe TcpListener, por exemplo), copia-o inalterado para o RPi e executa-o perfeitamente no RPi sob Mono. Isso ocorre porque o Mono substitui a maioria das classes base da estrutura .NET por sua própria versão, usando exatamente os mesmos namespaces, tipos e interfaces.
Dodgy_coder 11/09/12
4

Eu tenho um aplicativo .NET de linha de comando para trabalhar com o Mono. O aplicativo está basicamente fazendo algo semelhante ao encaminhamento de porta, pegando dados recebidos via UART serial e encaminhando-os por TCP / IP. Ele usa as classes SerialPort, TcpListener, TcpClient e Socket .NET, com apenas pequenas alterações necessárias no código de manipulação da SerialPort. Estou usando o SO Debian Soft Float.

Em termos de desempenho, a primeira coisa que me deparei foi algumas lentidões significativas em algum código de depuração / rastreamento que estava formatando uma matriz de bytes em uma sequência para fins de registro. Foi 50x mais lento em comparação com a execução em um PC.

Portanto, eu recomendo escrever alguns testes de unidade de desempenho ao portar o código existente no RPi.

Para testes de unidade, o NUnit funciona bem no RPi ...

Para instalar o NUnit:

sudo apt-get install nunit

Para correr:

nunit-console appUnderTest.exe
dodgy_coder
fonte
1
A velocidade é uma coisa relativa. Mas um PI de framboesa rodando a 1000 mhz (modelo 2) funciona aproximadamente como um Pentium 300 mhz, de modo que isso possa explicar por que o .NET / MONO parece um pouco lento para começar.
BerggreenDK