Có thể chạy mã .NET trên Pi bằng cách sử dụng mono không?


41

Có thể (và khả thi) để chạy các ứng dụng .NET trên Raspberry Pi với Mono không?

Nếu vậy, họ chạy tốt như thế nào? Là một GUI cơ bản có thể sử dụng được, hay hiệu năng kém thực tế hạn chế nó đối với các ứng dụng dòng lệnh?


Có lẽ Portable.NET cũng là một lựa chọn.
Der Hochstapler

Câu trả lời:


25

Có một câu hỏi StackOverflow khá giống với câu hỏi này, Mono trên Raspberry Pi . Tuy nhiên, qua nghiên cứu của riêng tôi, tôi không thể tìm thấy bất cứ điều gì cụ thể về .NET, mà chỉ là C #.

Bạn có thể cài đặt thời gian chạy bằng APT trên bản phân phối Debian bằng cách thực thi:

$ sudo apt-get install mono-runtime

Bạn cũng có thể (giả sử bạn có một số loại GUI như LXDE) cài đặt IDE Mono chậm với:

$ sudo apt-get install monodevelop

Đối với Arch Linux ARM, bạn cần cài đặt thời gian chạy qua Pacman , như vậy:

$ sudo pacman -S mono

IDE Mono có thể được cài đặt theo cách tương tự:

$ sudo pacman -S monodevelop

1
Bạn có ý gì bởi "thay vì chỉ C #"?
Jon Egerton

@JonEgerton C # là ngôn ngữ trong khi .NET là khung. Bạn có thể phát triển cho .NET framework bằng C #, nhưng C # có thể độc lập như một ngôn ngữ lập trình độc lập. Một ví dụ dễ hiểu hơn có thể là: bạn phát triển cho Android bằng Java, nhưng bạn có thể viết chương trình máy tính để bàn bằng Java. C # không phụ thuộc vào .NET, nhưng .NET phụ thuộc vào C #.
Andrew Larsson

Xin lỗi, đó không phải là ý tôi (Tôi là một .Net dev !!). Đó là sự độc quyền của C # chứ không phải các ngôn ngữ gia đình .net khác (vb.net, J # F #, v.v.). Tôi chưa bao giờ nhìn vào Mono và đã không nhận ra đó chỉ là C #.
Jon Egerton

5
@Andrew Đó là cách khác: .NET không phụ thuộc vào C # - nhưng C # không phụ thuộc vào thời gian chạy như .NET (hoặc Mono), thực tế nó không bao giờ là ngôn ngữ lập trình độc lập. Hơn nữa, mono hoàn toàn không biết ngôn ngữ (như .NET), vì vậy một lần nữa, nó không phụ thuộc vào C #.
Konrad Rudolph

1
Không cài đặt MonoDeveloper trên thiết bị. Đó là waaaay để chậm. Chỉ cần gắn một ổ đĩa mạng với CIFS và biên dịch trên PC / MAC nhanh và sau đó chạy thử qua mạng LAN.
BerggreenDK

8

Trái với suy nghĩ phổ biến, mã biên dịch VB.NET chạy tốt trên Raspberry Pi, dưới Debian ít nhất. apt-get install mono-vbnc và sau đó chạy exe VB của bạn làm đối số cho mono, ví dụ: mono yourexe.exe

Tôi chưa thực hiện bất kỳ tiêu chuẩn hiệu suất nào vì tôi không viết một ứng dụng chuyên sâu về hiệu suất nhưng có vẻ vẫn ổn cho đến nay.


bất kỳ ngôn ngữ .NET nào cũng biên dịch vào cùng một IL / Bytecode, vì vậy một khi bạn kích hoạt trình biên dịch (mono-vbnc hoặc bất kỳ ngôn ngữ nào), VB của bạn sẽ biến mất và IL là thứ được sử dụng trong lõi RUNTIME.
BerggreenDK

6

Mã .NET đang sử dụng các thư viện .NET Framework không thể chạy trên Raspberry Pi vì nó yêu cầu phiên bản NETMF hoặc CLR tương thích với ARM để chạy. Đến bây giờ, Microsoft vẫn chưa phát hành Windows trên ARM (WoA). Tham khảo Thí nghiệm 19 để Microsoft Research CLR hoạt động trên ARM.

Tuy nhiên, chạy mã .NET (không có tham chiếu hoặc sử dụng Thư viện .NET Framework) có thể sử dụng Mono vì Mono có CLR cho các thiết bị ARM.

Xem thêm Xây dựng Windows cho kiến ​​trúc bộ xử lý ARM để biết thông tin về Windows trên ARM (WoA).


3
Tôi nghĩ rằng tuyên bố của bạn là sai ở đây. Có thể sao chép tệp .EXE được biên dịch trên PC để tham chiếu và sử dụng các lớp khung .NET (ví dụ: lớp Socket hoặc lớp TcpListener chẳng hạn), sao chép nó không thay đổi vào RPi và để nó chạy hoàn hảo trên RPi dưới Mono. Điều này là do Mono thay thế hầu hết các lớp cơ sở .NET framework bằng phiên bản của chính nó, sử dụng chính xác các không gian tên, kiểu và giao diện.
dodgy_coder

4

Tôi đã có một ứng dụng .NET dòng lệnh để làm việc với Mono. Ứng dụng về cơ bản đang làm một cái gì đó giống như chuyển tiếp cổng, lấy dữ liệu nhận được thông qua UART nối tiếp và chuyển tiếp nó qua TCP / IP. Nó sử dụng các lớp SerialPort, TcpListener, TcpClient và Socket .NET, chỉ với những thay đổi nhỏ cần thiết cho mã xử lý SerialPort. Tôi đang sử dụng hệ điều hành float mềm Debian.

Về hiệu năng, điều đầu tiên tôi gặp phải là một số sự chậm chạp đáng kể trong một số mã gỡ lỗi / theo dõi đang định dạng một mảng byte thành một chuỗi cho mục đích ghi nhật ký. Nó chậm hơn 50 lần so với chạy trên PC.

Vì vậy, tôi khuyên bạn nên viết một số bài kiểm tra đơn vị hiệu suất khi chuyển mã hiện có sang RPi.

Đối với thử nghiệm đơn vị, NUnit hoạt động tốt trên RPi ...

Để cài đặt NUnit:

sudo apt-get install nunit

Chạy:

nunit-console appUnderTest.exe

1
Tốc độ là một điều tương đối. Nhưng một Raspberry PI chạy ở 1000 mhz (model 2) hoạt động xấp xỉ như Pentium 300 mhz, do đó có thể giải thích tại sao .NET / MONO cảm thấy khá chậm khi bắt đầu.
BerggreenDK
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.