Fråga:
Är det möjligt att köra .NET-kod på Pi med mono?
berry120
2012-06-13 03:02:29 UTC
view on stackexchange narkive permalink

Är det möjligt (och genomförbart) att köra .NET-applikationer på Raspberry Pi med Mono?

Om ja, hur bra går de? Är en grundläggande GUI användbar, eller begränsar dålig prestanda den realistiskt till kommandoradsapplikationer?

Kanske är [Portable.NET] (http://www.dotgnu.org/) också ett alternativ.
https://ms-iot.github.io/content/en-US/GetStarted.htm
Fyra svar:
#1
+26
Andrew Larsson
2012-06-13 03:45:42 UTC
view on stackexchange narkive permalink

Det finns en StackOverflow-fråga som liknar den här, Mono på Raspberry Pi. Men genom min egen forskning har jag inte kunnat hitta något specifikt för .NET, utan bara C #.

Du kan installera körtiden med APT på en Debian. distro genom att köra:

  $ sudo apt-get install mono-runtime  

Du kan också (förutsatt att du har någon form av GUI som LXDE) installera en långsam Mono IDE med:

  $ sudo apt-get install monodevelop  

För Arch Linux ARM måste du installera körtiden via Pacman, så här:

  $ sudo pacman -S mono  

The Mono IDE kan installeras på samma sätt:

  $ sudo pacman -S monodevelop  
Vad menar du med "snarare bara C #"?
@JonEgerton C # är ett språk medan .NET är ett ramverk. Du kan utveckla för .NET-ramverket med C #, men C # kan stå fristående som ett oberoende programmeringsspråk. Ett mer relaterat exempel kan vara: du utvecklar för Android med Java, men du kan skriva ett skrivbordsprogram med Java. C # beror inte på .NET, men. NET beror på C #.
Hej ledsen, det var inte det jag menade (jag är en .Net-dev !!). Det var mer exklusiviteten för C # och inte de andra .net-familjespråken (vb.net, J # F # etc). Jag har aldrig tittat på Mono och hade inte insett att det bara är C #.
Jag förstår vad du säger. Jag försökte bara hitta saker på C # och .NET och hade inte riktigt övervägt att kontrollera de andra. NET-språken. Från vad jag kommer ihåg och från alla forumtrådar som jag läste såg jag inget intresse för att utvecklare försökte få dem på RPi.
@Andrew Det är tvärtom: .NET beror inte på C # - men C # beror på en runtime * som * .NET (eller Mono), det är i praktiken aldrig ett oberoende programmeringsspråk. Dessutom är mono helt språkagnostiskt (som .NET), så det beror ännu en gång inte på C #.
Det är sant, men att vara ett ramverk innebär att det är knutet till ett språk. Det kan porteras / skrivas om som en annan implementering på ett annat språk, så kanske "bunden" är lite för starkt för att jag ska ha använt det.
Installera inte MonoDevelop på enheten. Det är väldigt långsamt. Montera bara en nätverksenhet med CIFS och kompilera på en snabb PC / MAC och testkör sedan över LAN.
@BerggreenDK Bra idé. Jag accepterar din redigering om du ändrar svaret för att inkludera det.
@AndrewLarsson - Jag har inte redigeringsrättigheter i denna del av StackoverFlow än. Men montera bara en CIFS-enhet. det är ganska snett framåt. Vanliga frågor på webbplatsen berättar till och med hur.
@AndrewLarsson - Egentligen är min idé inte riktigt min, mina utvecklarfärdigheter kommer från tid tillbaka med Commodore 64 och Amiga, där vi kunde korskompilera på större hårdvara för att kunna få bättre hastigheter vid testning. Så det är inget nytt, det är bara: "Dont work harder, work smarter" :-)
#2
+8
Guy
2012-07-19 14:57:25 UTC
view on stackexchange narkive permalink

I motsats till vad många tror, ​​fungerar VB.NET-kompilerad kod bra på Raspberry Pi, åtminstone under Debian. apt-get install mono-vbnc och kör sedan din VB exe som ett argument för mono t.ex. mono yourexe.exe

Jag har inte gjort några prestandamätvärden eftersom jag inte skriver en prestationsintensiv app men verkar bra hittills.

valfritt .NET-språk kompileras till samma IL / Bytecode, så när du utlöser kompilatorn (mono-vbnc eller vilket språk som helst) är din VB borta och IL är den sak som används i RUNTIME-kärnan.
#3
+6
JeeShen Lee
2012-07-16 11:37:44 UTC
view on stackexchange narkive permalink

.NET-kod som använder .NET Framework-bibliotek kan inte köras på Raspberry Pi eftersom den kräver en ARM-kompatibel version av NETMF eller CLR att springa. Från och med nu har Microsoft ännu inte släppt Windows på ARM (WoA). Se Experiment 19 för Microsoft Research CLR fungerar på ARM.

Att köra .NET-kod (utan referens eller använda .NET Framework Libraries) är dock möjligt med Mono eftersom Mono har en CLR för ARM-enheter.

Se även Bygg Windows för ARM-processorarkitekturen för information om Windows på ARM (WoA ).

Jag tror att ditt uttalande är fel här. Det är möjligt att kopiera en .EXE-fil som kompilerades på PC: n som refererar till och använder .NET ramklasser (t.ex. Socket-klassen eller TcpListener-klassen till exempel), kopiera den oförändrad till RPi och få den att fungera perfekt RPi under Mono. Detta beror på att [Mono ersätter de flesta .NET-ramklasserna] (http://www.mono-project.com/Compatibility) med sin egen version, med exakt samma namnområden, typer och gränssnitt.
#4
+4
dodgy_coder
2012-09-11 10:15:09 UTC
view on stackexchange narkive permalink

Jag har en .NET-applikation för att fungera med Mono. Appen gör i princip något som liknar vidarebefordran, tar data som tas emot via den seriella UART och vidarebefordrar den över TCP / IP. Den använder klasserna SerialPort, TcpListener, TcpClient och Socket .NET, med endast mindre ändringar som behövs i SerialPort-hanteringskoden. Jag använder operativsystemet Debian soft float.

När det gäller prestanda var det första jag stötte på några betydande avmattningar i någon felsöknings- / spårningskod som formaterade en rad byte i en sträng för loggningsändamål. Det var 50 gånger långsammare än att köra på en dator.

Så jag rekommenderar att du skriver några prestandaenhetstester när du porterar befintlig kod till RPi.

För enhetstester fungerar NUnit bra på RPi ...

Installera NUnit:

  sudo apt-get install nunit  

Att köra:

  nunit-console appUnderTest .exe  
Hastighet är en relativ sak. Men en Raspberry PI som körs på 1000 mhz (modell 2) presterar ungefär som en Pentium 300 mhz, så det kan förklara varför .NET / MONO känns ganska långsam till en början.


Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 3.0-licensen som det distribueras under.
Loading...