有没有人使用过大型或中型项目的开源.NET实现Mono?我想知道它是否适合现实世界的生产环境.它是否稳定,快速,兼容,......足以使用?是否需要花费大量精力将项目移植到Mono运行时,或者它是否真的非常兼容,只需要为Microsoft的运行时获取并运行已编写的代码?
我已将它用于许多内部和商业项目并取得了巨大成功.我的警告:
写下大量的单元测试并确保它们全部通过Mono - 这将为您节省很多麻烦.
除非你绝对必须,否则不要使用他们的嵌入API.它很容易使用,但它很容易垃圾收集有效的内存或泄漏你的所有内存.
永远都不要接近SVN,除非别无选择,否则不要自己编译.SVN中的情况经常发生变化,如果您的项目非常庞大,很可能最终会实现一些在发布版本上不起作用的东西.
不要试图自己解决问题,使用IRC频道.那里的人很有帮助,你会在几天内拯救自己 - 不要犯同样的错误.
祝好运!
编辑:我说不从源代码(版本或SVN)编译自己的原因是它很容易配置它而不是发布二进制文件和隐藏错误,例如在垃圾收集中.
编辑2:忘记回答你问题的第二部分.在我的情况下,我没有移植代码的问题,但我没有使用任何特定于MS的库(WinForms,ASP.NET等).如果你只使用System.*的东西,你会没事的; 除此之外,你可能遇到问题.不过,Mono 2.0非常稳固.
我发现Mono主要与MS二进制兼容.因此,我只是用MS编译,并在任何地方运行,就像Java一样!
Linux上Mono的性能与MS非常接近,在某些情况下慢了2倍,而在Windows上运行Mono则慢了5-10倍(但你应该坚持使用MS).
我有一些Mono的经验.
纯.NET的东西(如业务逻辑,控制器或算法)可以毫无问题地移植.然而,奇怪的事情开始出现在与操作系统,UI,服务或持久性交互的组件中.所以要做好一些调试和黑客的准备.
可能有用的事情:
组件驱动的开发 - 以便Windows .NET和Mono重用代码,同时隔离和测试差异)
持续集成运行并检查Mono和MS.NET的所有内容,以便尽可能快地发现可能的问题(建议自动部署和健全性检查)
在Mono中没有很多用于shell开发的UI组件套件.
当组件供应商说他的代码"与Mono兼容"时,它与"在Mono上运行并且受支持"不同.
虽然目前有一些公司正在与Mono一起投入生产,但由于以下因素,我仍然需要等待才能赶到那里:
缺乏体面和商业支持的UI组件套件
有效垃圾收集的问题
不是最好的调试体验(与VS 2010中的历史调试器相比)
PS:如果有一家公司提供完全托管的云计算解决方案(不仅仅是一台虚拟机,而且更像是Hadoop相当于.NET),那么即使遇到这些问题,我也会被迫参与其中.