有人在大中型项目中使用过Mono(开源.NET实现)吗?我想知道它是否为现实世界和生产环境做好了准备.它是稳定的,快速的,兼容的,...够用了吗?将项目移植到Mono运行时需要付出很多努力吗?或者它真的有足够的really兼容性,可以直接接收并运行已经为Microsoft运行时编写的代码吗?

推荐答案

有两种情况需要考虑:(a)如果您正在移植一个现有的应用程序,并且想知道Mono是否足以完成这项任务;(b) 你开始写一些新代码,你想知道Mono是否足够成熟.

对于第一种情况,您可以使用Mono Migration Analyzer tool(MOMA)来判断您的应用程序距离在Mono上运行有多远.如果判断结果非常出色,您应该开始测试和质量保证,并准备发货.

如果您的判断结果是一份报告,其中突出了Mono中缺少的功能或在语义上存在显著差异的功能,那么您必须判断代码是否可以修改、重写,或者在最坏的情况下,您的应用程序是否可以在功能减少的情况下工作.

根据我们的MOMA基于用户提交的数据(这是来自记忆),大约50%的应用程序开箱即用,大约25%需要大约一周的工作(重构、修改),另外15%需要认真promise 重做你的代码块,而睡觉就是不值得移植,因为它们与win32Bundle 在一起太令人难以置信了.在这一点上,要么您从零开始,要么业务决策将推动使您的代码可移植的努力,但我们谈论的是数月的工作(至少从我们拥有的报告来看).

如果您从头开始,情况会简单得多,因为您将只使用Mono中提供的API.只要您继续使用受支持的堆栈(几乎是.NET2.0,加上3.5中的所有核心升级,包括LINQ和System.Core,再加上任何Mono跨平台API),您就会没事的.

每隔一段时间,你可能会在Mono中遇到bug或局限性,你可能需要解决它们,但这与任何其他系统都没有什么不同.

至于可移植性:ASP.NET应用程序更容易移植,因为这些应用程序对Win32几乎没有依赖性,甚至可以使用SQL server或其他流行的数据库(Mono有很多Bundle 的数据库提供程序).

Windows.Forms移植有时比较棘手,因为开发人员喜欢逃离.NET沙箱,并且P/调动他们的脑力来配置一些有用的东西,比如在wParam中更改光标闪烁速率(表示为以BCD形式编码的两个Bezier点).或者像这样的垃圾.

.net相关问答推荐

Docker失败文件找不到

安装特定主要版本的DotNet SDK最新版本

CLR如何在后台优化布尔比较操作?

当数据大量分布在微服务中时,我应该如何设计后端?

如何在 ASP.NET Core MVC 中读取操作方法的属性?

为什么 SortedSet.GetViewBetween 不是 O(log N)?

我可以从我的应用程序中抛出哪些内置 .NET 异常?

如何删除只读文件?

File.ReadAllLines() 和 File.ReadAllText() 有什么区别?

运算符重载 ==, !=, Equals

String.Format - 它是如何工作的以及如何实现自定义格式字符串

ILookup 接口与 IDictionary

更改 SqlConnection 超时

确定使用 ContextMenuStrip 的控件

WebClient.DownloadString 由于编码问题导致字符损坏,但浏览器正常

在 .Net 中调用 Web 服务时绕过无效的 SSL 证书错误

铸造:(NewType)与对象作为NewType

ValueTypes 如何从 Object (ReferenceType) 派生并且仍然是 ValueTypes?

如何隐藏 WPF ListView 的标题?

实体框架太慢了.我有哪些 Select ?