Windows上的Mono有什么意义?

这可能是一个愚蠢的问题…但我只是看着Mono项目,他们有一个关于在Windows上安装Mono的部分。 但是,由于Windows显然已经有了.NET运行时,任何人都可以告诉我,具有Mono for Windows的意义何在? 它有助于跨平台开发什么的?

由于Mono不像.MS Framework那样实现.Net 100%,所以你可以在Mono上testing,而不必在Linux上运行。 单声道也有绑定,使MS不支持的GTKforms。

Mono有一些.NET没有的function。

单声道是高度模块化的。 你可以把它分成小块,只configuration你需要的部分。 不想要System.Xml? 好吧,它消失了。

单声道是可embedded的。 您可以将其托pipe在C / C ++应用程序中,以允许用户从安全的托pipe沙箱环境编写脚本。 这个最着名的例子是mod_mono,它在Apachenetworking服务器中托pipeMono,例如,在Mono中如何实现ASP.NET。 这个function与上面提到的模块化一起很好。

这已经被提到:静态链接。 与模块化一起很好。

编译器即服务是另一个。 Anders Hejlsberg长期以来一直在谈论这个问题, 也许只是可能会为C#5.0做好准备。 那么,Mono已经拥有了它,并且已经有了这么多年了。

Mono的首席开发人员Miguel de Icaza也有一个倡议,他称之为“Embrace and Extend.NET”,它以其他CLI实现(包括.NET)不可能实现的方式来扩展CLI。 到目前为止,Embrace和Extend.NET有三个特点。

Mono.Simd,可以安全和可控地访问底层CPU的SIMD指令(例如Intel上的SSE或PowerPC上的AltiVec)。 用于游戏和graphics。

64位数组索引,这是ECMA规范允许的,但Mono是实际提供它们的唯一VM。 用于超级计算。

而最近的延续。 这实际上是Mono首次超越了规范领域:长数组索引完全符合规范,Mono.Simd也适用于每个CLI兼容的实现(虽然非常慢),但是Mono.Tasklet需要特殊的支持来自不是CLI或.NET一部分的VM。 这是用于游戏逻辑和例如在第二人生。

  • Mono does some things the .Net doesn't. 例如,mono支持静态链接,因此您可以构build,编译和分发您的应用程序,而无需单独的运行时安装程序。 如果您构build的应用程序依赖于单声道是跨平台的,则会有一些差异,因此在Windows上使用mono可以更好地保证兼容性。

  • .Net does some things that mono doesn't. BCL中有几个地方还没有移植到单声道。 如果你想要一个应用程序,也可以在Mac / Linux上工作,你可能需要首先开发单声道,即使你在Windows上工作。

从Mono的技术常见问题解答 :

为什么支持Windows,什么时候可以运行真实的东西?

有各种原因:

支持Windows帮助我们从非便携式版本中识别出Mono的便携式部分,帮助Mono在将来变得更加便携。

它帮助我们,因为我们可以通过划分问题(是运行时问题还是操作系统问题?)来隔离单声道问题。

大约一半的Mono贡献者是Windows开发者。 他们有很多不同的原因促成这种努力,我们发现让这些开发人员在Windows上运行运行时而不强迫他们使用新的操作系统是非常重要的。

单声道不会大量修改Windowsregistry,更新系统DLL,将DLL安装到Windows / System32path。

它帮助基于Windows的开发人员在部署到Linux之前在Mono下testing他们的代码。

Mono和embeddedMono的应用程序可以在没有安装程序的情况下部署(您可以在不安装.NET运行时的情况下“xcopy”部署应用程序和所需的Mono文件。

如果你想在C#中开发一个跨平台的应用程序,那么使用微软的实现并不是最聪明的,因为在其他平台上没有完全兼容的select。

因此,在Windows上使用Mono来开发应用程序可以确保您将其移植到其他操作系统时没有任何问题(前提是您避免使用P / Invoke等其他坑)。

有些人使用它,因为他们不允许在他们的Windows PC上安装.Net框架,因为registry和系统文件数量太多了。 (在严格控制的环境中)

另一方面,单声道是自我包含在程序文件中,只写入一个registry项(它不需要运行)。

我觉得这很愚蠢,但这是多个用户告诉我们的。

这主要是为了开发Mono特定库的Mono应用程序。 也是为了帮助推动事业,让开发者在开发Mono时能够在自然环境中工作。

虽然没有广泛的兴趣,有几个情况下,单声道的标准微软运行时的改进。 米格尔今年在PDC上发表了一些演讲:

看到这些post:

  • 演示video
  • SIMD支持和游戏

即使你有与Monodynamic链接的程序,你也可以在pendrive上编译.exe和Mono运行时,并且安装另一台没有安装.NET / Mono的计算机,然后在没有运行时安装的情况下在新PC上运行该程序。 即导致便携式应用程序(特别是便携式的USB笔驱动器应用程序很有用)这是不可能与.NET。 您必须以特定的安装程序方式安装.NET运行库,即运行时包含不可能的文件夹复制和粘贴。

我认为他们这样做的主要原因是他们可以在Mono和.NET上并行运行.NET应用程序来比较它们。 另外,还有一些应用程序依赖于Mono库。

若要添加其他答案中提到的许多原因,Mono for Windows可能需要安装在Wine上以允许在Wine内部运行.Net应用程序。

让你免受networking的困扰!