모노를 사용하여 Pi에서 .NET 코드를 실행할 수 있습니까?


41

Mono 를 사용하여 Raspberry Pi에서 .NET 응용 프로그램을 실행할 수 있습니까?

그렇다면 얼마나 잘 운영됩니까? 기본 GUI를 사용할 수 있습니까 아니면 성능 저하로 인해 GUI가 명령 줄 응용 프로그램으로 제한됩니까?


아마도 Portable.NET 도 옵션입니다.
Der Hochstapler

답변:


25

이와 비슷한 StackOverflow 질문이 있습니다. Mono on Raspberry Pi . 그러나 내 자신의 연구를 통해 .NET에만 해당되는 것이 아니라 C # 만 찾을 수있었습니다.

다음을 실행하여 데비안 배포판에서 APT 를 사용하여 런타임을 설치할 수 있습니다 .

$ sudo apt-get install mono-runtime

LXDE와 같은 GUI가 있다고 가정하면 다음과 같이 느린 모노 IDE를 설치할 수 있습니다.

$ sudo apt-get install monodevelop

들어 아치 리눅스 ARM 당신은을 통해 런타임을 설치해야합니다 팩맨 과 같이 :

$ sudo pacman -S mono

모노 IDE는 비슷한 방식으로 설치 될 수 있습니다 :

$ sudo pacman -S monodevelop

1
"단지 C #이 아니라"는 무슨 뜻입니까?
Jon Egerton

@JonEgerton C #은 언어 인 반면 .NET은 프레임 워크입니다. C #을 사용하여 .NET 프레임 워크 용으로 개발할 수 있지만 C #은 독립적 인 프로그래밍 언어로 독립적 일 수 있습니다. 보다 관련성이 높은 예는 다음과 같습니다. Java를 사용하여 Android 용으로 개발하지만 Java를 사용하여 데스크탑 프로그램을 작성할 수 있습니다. C #은 .NET에 의존하지 않지만 .NET은 C #에 의존합니다.
앤드류 라르손

죄송합니다. 그건 제가 의미 한 바가 아닙니다 (.Net 개발자입니다!). 다른 .net 제품군 언어 (vb.net, J # F # 등)가 아닌 C #의 독점권이었습니다. 나는 모노를 보지 않았으며 그것이 C #이라는 것을 깨닫지 못했습니다.
Jon Egerton

5
@Andrew 다른 방법으로 .NET은 C #에 의존하지 않지만 C #은 .NET (또는 모노) 과 같은 런타임에 의존 하므로 실제로는 독립적 인 프로그래밍 언어가 아닙니다. 또한 모노는 완전히 언어에 구애받지 않으므로 (.NET과 마찬가지로) C #에 의존하지 않습니다.
Konrad Rudolph

1
장치에 MonoDeveloper를 설치하지 마십시오. 속도가 느려집니다. CIFS로 네트워크 드라이브를 마운트하고 빠른 PC / MAC에서 컴파일 한 다음 LAN을 통해 테스트 실행하십시오.
BerggreenDK

8

일반적인 생각과는 달리 VB.NET 컴파일 코드는 최소한 데비안의 Raspberry Pi에서 잘 작동합니다. apt-get mono-vbnc를 설치 한 다음 mono yourexe.exe와 같이 mono에 대한 인수로 VB exe를 실행하십시오.

성능 집약적 인 응용 프로그램을 작성하지는 않지만 지금까지는 괜찮은 것처럼 성능 벤치 마크를 수행하지 않았습니다.


모든 .NET 언어는 동일한 IL / 바이트 코드로 컴파일되므로 일단 컴파일러 (mono-vbnc 또는 다른 언어)를 트리거하면 VB가 사라지고 IL은 RUNTIME 코어에서 사용됩니다.
BerggreenDK

6

.NET Framework 라이브러리를 사용하는 .NET 코드 는 ARM 호환 버전의 NETMF 또는 CLR 이 필요하므로 Raspberry Pi에서 실행할 수 없습니다 . 현재 Microsoft는 아직 Windows on ARM (WoA)을 출시하지 않았습니다. ARM에 대한 Microsoft Research CLR 작업에 대해서는 실험 19 를 참조하십시오 .

그러나 Mono에는 ARM 장치 용 CLR이 있으므로 Mono를 사용하여 .NET 코드 (참조없이 또는 .NET Framework 라이브러리 사용)를 실행할 수 있습니다.

ARM on Windows (WoA)에 대한 정보 는 ARM 프로세서 아키텍처를 위한 Windows 빌드를 참조하십시오 .


3
나는 당신의 진술이 잘못되었다고 생각합니다. .NET 프레임 워크 클래스 (예 : Socket 클래스 또는 TcpListener 클래스)를 참조하고 사용하는 PC에서 컴파일 된 .EXE 파일을 복사하고 RPi에 변경없이 복사하여 완벽하게 실행할 수 있습니다. 모노에서 RPi. Mono는 정확히 동일한 네임 스페이스, 유형 및 인터페이스를 사용하여 대부분의 .NET Framework 기본 클래스 를 자체 버전으로 대체 하기 때문 입니다.
dodgy_coder

4

Mono와 작동하는 명령 줄 .NET 응용 프로그램이 있습니다. 앱은 기본적으로 포트 포워딩과 비슷한 작업을 수행하며 직렬 UART를 통해 수신 된 데이터를 가져와 TCP / IP를 통해 전달합니다. SerialPort, TcpListener, TcpClient 및 Socket .NET 클래스를 사용하며 SerialPort 처리 코드에 약간의 변경 만 필요합니다. 데비안 소프트 플로트 OS를 사용하고 있습니다.

성능 측면에서, 내가 처음 접한 것은 로깅 목적으로 바이트 배열을 문자열로 형식화하는 일부 디버깅 / 추적 코드에서 약간의 속도 저하였습니다. PC에서 실행하는 것보다 50 배 느립니다.

따라서 기존 코드를 RPi에 이식 할 때 성능 단위 테스트를 작성하는 것이 좋습니다.

단위 테스트의 경우 NUnit은 RPi에서 잘 작동합니다.

NUnit을 설치하려면

sudo apt-get install nunit

실행하려면

nunit-console appUnderTest.exe

1
속도는 상대적입니다. 그러나 1000MHz (모델 2)로 실행되는 Raspberry PI는 Pentium 300MHz와 거의 비슷하므로 .NET / MONO가 시작하기에 다소 느리게 느껴지는 이유를 설명 할 수 있습니다.
BerggreenDK 2013
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.