有人在大型或中型项目中使用过。net开源实现Mono吗?我想知道它是否已经为现实世界的生产环境做好了准备。它是否稳定、快速、兼容……足够用了吗?将项目移植到Mono运行时是否需要花费大量的精力,或者它是否真的足够兼容,只需要为微软的运行时编写代码就可以了?
当前回答
对于公认答案的建议现在有点过时了。
The windows forms implementation is pretty good now. (See Paint-Mono for a port of Paint.net which is a pretty involved Windows forms application. All that was required was an emulation layer for some of the P-Invoke and unsupported system calls). Path.Combine as well as Path.Seperator to join paths and filenames. The windows Registry is OK, as long as you are only using it for storing and retrieving data from your applications (i.e. you can't get any information about Windows from it, since it is basically a registry for Mono applications).
其他回答
这实际上取决于您从. net框架中使用的名称空间和类。我有兴趣将我的一个windows服务转换到我的电子邮件服务器(Suse)上运行,但我们遇到了几个尚未完全实现的api的硬障碍。Mono网站上的某个地方有一个图表,列出了所有的课程及其完成程度。如果你的申请被覆盖了,那就去申请吧。
当然,像任何其他应用程序一样,在做出全面承诺之前要进行原型设计和测试。
我们遇到的另一个问题是授权软件:如果您引用的是别人的DLL,那么您就无法通过编写代码来绕过隐藏在该程序集中的不兼容性。
它覆盖了。net 4.0,甚至包括了。net 4.5 api的一些特性,但是有一些领域我们选择不去实现,因为api被弃用了,新的替代品被创建了,或者范围太大了。以下api在Mono中不可用:
Windows Presentation Foundation Windows Workflow Foundation(两个版本都不是) 实体框架 标准Web服务堆栈的WSE1/WSE2“附加组件”
此外,我们的WCF实现仅限于Silverlight支持的内容。
检查特定项目的最简单方法是运行Mono Migration Analyzer (MoMA)。好处是它会通知Mono团队那些会阻止你使用Mono的问题(如果有的话),这让他们优先考虑他们的工作。
我最近在SubSonic上运行了MoMA,只发现了一个问题——对Nullable类型的奇怪使用。这是一个很大的代码库,所以覆盖率非常高。
Mono在一些商业产品和开源产品中得到了积极的应用。它在一些大型应用程序中使用,如维基百科和Mozilla开发者中心,并已在嵌入式应用程序中使用,如Sansa MP3播放器,并为数以千计的已发行游戏提供了动力。
在语言层面,Mono编译器完全符合c# 5.0语言规范。
不,单核细胞增多症还不能胜任严肃的工作。我用f#在Windows上写了几个程序,然后在Mono上运行。这些程序相当密集地使用磁盘、内存和cpu。我看到在单库(托管代码)中崩溃,在本地代码中崩溃,在虚拟机中崩溃。当mono运行时,程序比Windows中的。net慢了至少两倍,并且占用了更多的内存。在严肃的工作中远离单核细胞增多症。
如果你想使用WPF,那你就不走运了,Mono目前还没有计划实现它。
http://www.mono-project.com/WPF
对于公认答案的建议现在有点过时了。
The windows forms implementation is pretty good now. (See Paint-Mono for a port of Paint.net which is a pretty involved Windows forms application. All that was required was an emulation layer for some of the P-Invoke and unsupported system calls). Path.Combine as well as Path.Seperator to join paths and filenames. The windows Registry is OK, as long as you are only using it for storing and retrieving data from your applications (i.e. you can't get any information about Windows from it, since it is basically a registry for Mono applications).