เป็นไปได้ไหมที่จะเรียกใช้รหัส. NET บน Pi โดยใช้โมโน


41

เป็นไปได้ (และทำได้) ในการรันแอปพลิเคชั่น. NET บน Raspberry Pi พร้อมMonoหรือไม่?

ถ้าเป็นเช่นนั้นพวกเขาทำงานได้ดีแค่ไหน? GUI พื้นฐานสามารถใช้งานได้หรือประสิทธิภาพที่ไม่ดีนั้น จำกัด ให้กับแอปพลิเคชันบรรทัดคำสั่งจริงหรือไม่


บางทีPortable.NETก็เป็นตัวเลือกเช่นกัน
Der Hochstapler

คำตอบ:


25

มีคำถาม StackOverflow ค่อนข้างคล้ายกับนี้เป็นโมโนราสเบอร์รี่ Pi อย่างไรก็ตามจากการวิจัยของฉันเองฉันไม่สามารถค้นหาอะไรที่เฉพาะเจาะจงกับ. NET แต่เป็นเพียง C #

คุณสามารถติดตั้งรันไทม์โดยใช้APTบน Debian distro โดยดำเนินการ:

$ sudo apt-get install mono-runtime

คุณยังสามารถ (สมมติว่าคุณมี GUI บางประเภทเช่น LXDE) ติดตั้งMono IDE ช้าด้วย:

$ sudo apt-get install monodevelop

สำหรับArch Linux ARM คุณต้องติดตั้งรันไทม์ผ่านPacmanเช่น:

$ sudo pacman -S mono

Mono IDE สามารถติดตั้งในรูปแบบที่คล้ายกัน:

$ sudo pacman -S monodevelop

1
คุณหมายถึงอะไรโดย "แทนที่จะเป็นแค่ C #"
Jon Egerton

@JonEgerton C # เป็นภาษาในขณะที่. NET เป็นเฟรมเวิร์ก คุณสามารถพัฒนาสำหรับ. NET Framework ด้วย C # แต่ C # สามารถยืนอยู่คนเดียวเป็นภาษาโปรแกรมอิสระ ตัวอย่างที่เกี่ยวข้องมากขึ้นอาจเป็น: คุณพัฒนาสำหรับ Android ด้วย Java แต่คุณสามารถเขียนโปรแกรมเดสก์ท็อปกับ Java C # ไม่ขึ้นอยู่กับ. NET แต่. NET ขึ้นอยู่กับ C #
Andrew Larsson

สวัสดีขอโทษนั่นไม่ใช่สิ่งที่ฉันหมายถึง (ฉันเป็น. dev สุทธิ !!) มันเป็นความพิเศษของ C # มากกว่าภาษาตระกูล. net อื่น ๆ (vb.net, J # F # ฯลฯ ) ฉันไม่เคยมองเข้าไปใน Mono และไม่ได้ตระหนักว่ามันเป็น C # เท่านั้น
Jon Egerton

5
@ แอนดรูว์เป็นอีกวิธีหนึ่ง:. NET ไม่ได้ขึ้นอยู่กับ C # - แต่ C # ขึ้นอยู่กับรันไทม์เช่น . NET (หรือ Mono) มันไม่เคยฝึกภาษาโปรแกรมอิสระเลย นอกจากนี้โมโนเป็นผู้ไม่เชื่อเรื่องภาษาทั้งหมด (เช่นเดียวกับ. NET) ดังนั้นจึงไม่ขึ้นอยู่กับ C #
Konrad Rudolph

1
อย่าติดตั้ง MonoDeveloper บนอุปกรณ์ พี่จะรอช้า เพียงเชื่อมต่อเครือข่ายไดรฟ์กับ CIFS และคอมไพล์บน PC / MAC ที่รวดเร็วแล้วทดสอบการทำงานผ่าน LAN
BerggreenDK

8

ขัดกับความเชื่อที่นิยมรหัสรวบรวม VB.NET ทำงานได้ดีบน Raspberry Pi ภายใต้ Debian อย่างน้อย apt-get install mono-vbnc จากนั้นรัน VB exe ของคุณเป็นอาร์กิวเมนต์สำหรับ mono เช่น monrex yourexe.exe

ฉันยังไม่ได้ทำการทดสอบประสิทธิภาพเนื่องจากฉันไม่ได้เขียนแอพที่เน้นประสิทธิภาพ แต่ดูเหมือนดีมาก


. NET ภาษาใด ๆ ที่รวบรวมลงใน IL / Bytecode เดียวกันดังนั้นเมื่อคุณทริกเกอร์คอมไพเลอร์ (mono-vbnc หรือภาษาอื่น ๆ ) VB ของคุณจะหายไปและ IL เป็นสิ่งที่ใช้ในแกน RUNTIME
BerggreenDK

6

รหัส. NET ที่ใช้. NET Frameworkไลบรารี่ไม่สามารถทำงานบน Raspberry Pi ได้เนื่องจากมันต้องใช้NETMFหรือCLRรุ่นที่เข้ากันได้กับ ARM ณ ตอนนี้ Microsoft ยังไม่ได้เปิดตัว Windows บน ARM (WoA) อ้างถึงการทดลองที่ 19สำหรับ Microsoft Research CLR ใช้งานได้บน ARM

อย่างไรก็ตามการเรียกใช้รหัส. NET (โดยไม่มีการอ้างอิงหรือการใช้. NET Framework Libraries) สามารถทำได้โดยใช้ Mono เนื่องจาก Mono มี CLR สำหรับอุปกรณ์ ARM

โปรดดูการสร้าง Windows สำหรับสถาปัตยกรรมตัวประมวลผล ARMสำหรับข้อมูลเกี่ยวกับ Windows บน ARM (WoA)


3
ฉันคิดว่าคำพูดของคุณผิดที่นี่ มันเป็นไปได้ที่จะคัดลอกไฟล์. EXE ซึ่งถูกคอมไพล์บนเครื่อง PC ซึ่งอ้างอิงและใช้คลาส. NET Framework (เช่นคลาส Socket หรือ TcpListener class เป็นต้น) คัดลอกไปที่ RPI ที่ไม่เปลี่ยนแปลงและให้มันทำงานอย่างสมบูรณ์บน RPi ภายใต้โมโน นี่เป็นเพราะโมโนแทนที่คลาสพื้นฐานของ. NET Framework ส่วนใหญ่ด้วยเวอร์ชันของตัวเองโดยใช้เนมสเปซประเภทและอินเทอร์เฟซที่เหมือนกันทุกประการ
dodgy_coder

4

ฉันมีแอพพลิเคชั่น. บรรทัดคำสั่ง. NET เพื่อทำงานกับโมโน โดยทั่วไปแล้วแอพนี้ทำอะไรบางอย่างคล้ายกับการส่งต่อพอร์ตโดยรับข้อมูลผ่านทางพอร์ตอนุกรม UART และส่งต่อผ่าน TCP / IP มันใช้คลาส SerialPort, TcpListener, TcpClient และ Socket .NET โดยมีการเปลี่ยนแปลงเพียงเล็กน้อยที่จำเป็นสำหรับรหัสการจัดการ SerialPort ฉันใช้ระบบปฏิบัติการ Debian soft float

ในแง่ของประสิทธิภาพสิ่งแรกที่ฉันเจอคือการชะลอตัวที่สำคัญบางอย่างในโค้ดดีบัก / ติดตามซึ่งจัดรูปแบบอาร์เรย์ของไบต์เป็นสตริงสำหรับการบันทึก มันช้ากว่า 50 เท่าเมื่อเทียบกับการใช้งานบนพีซี

ดังนั้นฉันขอแนะนำให้เขียนการทดสอบหน่วยประสิทธิภาพเมื่อทำการย้ายรหัสที่มีอยู่ไปยัง RPi

สำหรับการทดสอบหน่วย NUnit ทำงานได้ดีบน RPi ...

ในการติดตั้ง NUnit:

sudo apt-get install nunit

วิ่ง:

nunit-console appUnderTest.exe

1
ความเร็วเป็นสิ่งที่สัมพันธ์กัน แต่ Raspberry PI ทำงานที่ความเร็ว 1000 mhz (รุ่น 2) ทำงานประมาณ Pentium 300 mhz ดังนั้นอาจอธิบายได้ว่าทำไม. NET / MONO จึงค่อนข้างช้าสำหรับการเริ่มต้น
BerggreenDK
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.