Mono在Windows上有什么意义

Ada*_*ile 62 windows mono

这可能是一个愚蠢的问题......但我只是在调查Mono项目,他们有一个关于在Windows上安装Mono的部分.但是,由于Windows显然已经拥有.NET运行时,任何人都可以告诉我Mono for Windows究竟是什么意思?它对跨平台开发有帮助吗?

Jör*_*tag 68

Mono有一些.NET没有的功能.

Mono是高度模块化的.您可以在小小的打碎它拆开,只部署正是那些你需要的部分.不想要System.Xml?很好,它已经消失了.

单声道是可嵌入的.您可以在C/C++应用程序中托管它,以允许用户从安全的托管沙盒环境中编写脚本.最着名的例子是mod_mono,它在Apache网络服务器中托管Mono,例如,是在Mono中实现ASP.NET的方式.该特征与上述模块化一起很好.

这已经提到:静态链接.模块化很好.

编译器即服务是另一个.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).用于游戏和图形.

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

最近,延续.这实际上是Mono第一次超出规范范围:长数组索引完全符合规范,Mono.Simd也适用于每个CLI兼容的实现(尽管非常慢),但Mono.Tasklet需要特殊的来自VM的支持,不属于CLI或.NET.这用于游戏逻辑,例如在Second Life中.


Kib*_*bee 63

因为Mono没有实现.Net 100%与MS .Net Framework相同,所以你可以在Mono上测试而不必在Linux上运行.Mono也有绑定与GTK制作表格,MS不支持.

  • @Javier阅读Miguel的这篇文章http://tirania.org/blog/archive/2009/May-06.html mono绝对不仅仅是关注ms. (11认同)
  • 虽然MS.Net没有支持Gtk#,但Mono项目发布了一个Windows安装程序,允许Gtk#应用程序在没有Mono的MS.Net上运行. (7认同)
  • 谁说他在我们这边?*咳嗽* (2认同)
  • Mono也有.NET没有的东西,就像已经提到过的CsharpRepl(C#的类似解释器的命令窗口,真的很酷),TextTemplating引擎和Mono.Cecil,它比Reflection更好 - 看到这篇不错的博文:http ://amazedsaint.blogspot.com/2010/10/monocsharp-monocecil-and.html (2认同)

Joe*_*orn 24

Mono做了一些事情.Net没有.

例如,mono支持静态链接,因此您无需单独的运行时安装程序即可构建,编译和分发应用程序.如果你构建了一个依赖单声道跨平台的应用程序,那么与.Net存在一些差异,因此在Windows上坚持使用mono可以更好地保证兼容性.

.Net做了一些单声道没有的东西.

BCL中有一些地方尚未移植到单声道,例如WPF和Winforms等.

如果你想要一个也可以在mac/linux上运行的应用程序,你可能希望首先开发单声道,即使你在windows上做了大部分的工作.


注意:所有这些预先日期.Net Core/Standard.


Oha*_*der 13

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

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

原因有很多:

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

它可以帮助我们,因为我们可以通过对问题进行分区来解决Mono中的问题(是运行时问题还是操作系统问题?).

Mono的贡献者大约有一半是Windows开发人员.他们有很多不同的理由为这项工作做出贡献,我们发现让这些开发人员在Windows上运行运行时而不强迫他们使用新的操作系统非常重要.

Mono不会大量修改Windows注册表,更新系统DLL,将DLL安装到Windows/System32路径.

它可以帮助基于Windows的开发人员在部署到Linux之前在Mono下测试他们的代码.

可以在没有安装程序的情况下部署Mono和嵌入Mono的应用程序(您可以"xcopy"部署应用程序和所需的Mono文件,而无需安装.NET运行时).


Joa*_*uer 12

如果您想在C#中开发跨平台应用程序,那么使用Microsoft的实现并不是最明智的事情,因为其他平台没有完全兼容的替代方案.

因此,在Windows上使用Mono开发应用程序可以确保将其移植到其他操作系统时遇到的麻烦很少(前提是您避免使用P/Invoke等其他操作系统).


jpo*_*bst 8

有些人使用它是因为他们不允许在他们的Windows PC上安装.Net框架,因为注册表和系统文件数量很大.(在严格控制的环境中.)

另一方面,Mono自包含在Program Files中,只编写一个带有路径的注册表项(不需要运行).

我认为这有点傻,但这是多个用户告诉我们的.