是否可以(并且可行)在具有Mono的Raspberry Pi上运行.NET应用程序?

如果是这样,它们运行得如何?基本的GUI是否可用,或者性能差实际上将其限制在命令行应用程序中?

评论

也许Portable.NET也是一个选择。

ms-iot.github.io/content/zh-CN/GetStarted.htm

#1 楼

在Raspberry Pi上有一个与此非常相似的StackOverflow问题。但是,通过我自己的研究,我无法找到特定于.NET的任何东西,而只能找到C#。

您可以通过执行以下操作在Debian发行版上使用APT安装运行时:

$ 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


评论


您所说的“仅C#”是什么意思?

–乔恩·埃格顿(Jon Egerton)
2012年7月16日在8:09

@JonEgerton C#是一种语言,而.NET是一个框架。您可以使用C#为.NET框架进行开发,但是C#可以作为独立的编程语言独立存在。一个更相关的示例可能是:您使用Java为Android开发,但可以使用Java编写桌面程序。 C#不依赖于.NET,但是.NET依赖于C#。

–安德鲁·拉尔森(Andrew Larsson)
2012年7月16日在18:12



嗨,抱歉,这不是我的意思(我是.Net开发者!)。它更多地是C#的排他性,而不是其他.net家族语言(vb.net,J#F#等)。我从来没有研究过Mono,也没有意识到这仅仅是C#。

–乔恩·埃格顿(Jon Egerton)
2012年7月16日在21:31

@Andrew恰恰相反:.NET不依赖C#,但是C#依赖于诸如.NET(或Mono)之类的运行时,在实践中它从来都不是独立的编程语言。此外,mono完全与语言无关(.NET也是如此),因此它再次不依赖于C#。

–康拉德·鲁道夫(Konrad Rudolph)
2012年8月5日在16:31



不要在设备上安装MonoDeveloper。那太慢了。只需使用CIFS安装网络驱动器,然后在快速的PC / MAC上进行编译,然后通过LAN进行测试即可。

–BerggreenDK
13年2月24日在1:56

#2 楼

与流行的看法相反,VB.NET编译的代码至少在Debian下的Raspberry Pi上运行良好。 apt-get install mono-vbnc,然后运行您的VB exe作为mono的参数,例如mono yourexe.exe

我没有做任何性能基准测试,因为我没有编写性能密集型应用程序,但是到目前为止还不错。

评论


任何.NET语言都可以编译为相同的IL /字节码,因此一旦触发编译器(mono-vbnc或任何语言),您的VB就会消失,IL就是RUNTIME内核中使用的东西。

–BerggreenDK
13年2月24日在1:58

#3 楼

使用.NET Framework库的.NET代码无法在Raspberry Pi上运行,因为它需要运行ARM兼容版本的NETMF或CLR。到目前为止,Microsoft尚未发布基于ARM(WoA)的Windows。有关适用于ARM的Microsoft Research CLR的信息,请参阅实验19。
但是,由于Mono具有适用于ARM设备的CLR,因此可以使用Mono运行.NET代码(无需参考或使用.NET Framework库)。还为ARM处理器体系结构构建Windows,以获取有关ARM on Windows(WoA)上的信息。

评论


我认为您的说法在这里是错误的。可以复制在PC上编译的.EXE文件,该文件引用并使用.NET框架类(例如Socket类或TcpListener类),再将其原样复制到RPi,并使其在RPi上完美运行单声道下的RPi。这是因为Mono使用完全相同的名称空间,类型和接口,用自己的版本替换了大多数.NET框架基类。

– dodgy_coder
2012年9月11日下午5:31

#4 楼

我有一个命令行.NET应用程序可与Mono一起使用。该应用程序基本上在做类似于端口转发的操作,接收通过串行UART接收的数据并通过TCP / IP转发。它使用SerialPort,TcpListener,TcpClient和Socket .NET类,仅需对SerialPort处理代码进行较小的更改。我正在使用Debian软浮动OS。

在性能方面,我遇到的第一件事是某些调试/跟踪代码的显着减慢,该代码将字节数组格式化为字符串用于记录目的。与在PC上运行相比,它慢了50倍。

因此,我建议在将现有代码移植到RPi时编写一些性能单元测试。

对于单元测试,NUnit在RPi上可以正常工作...

要安装NUnit:

sudo apt-get install nunit


要运行:

nunit-console appUnderTest.exe


评论


速度是相对的。但是运行在1000兆赫兹(型号2)的Raspberry PI的性能近似于奔腾300兆赫兹,因此这可以解释为什么.NET / MONO刚开始时会感觉很慢。

–BerggreenDK
13年2月24日在2:00