Mono在Windows上有什么意义

时间:2009-04-15 13:18:04

标签: windows mono

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

12 个答案:

答案 0 :(得分:68)

Mono有一些功能,.NET没有。

Mono高度模块化。您可以将它分成小块,只需部署 那些您需要的部分。不想要System.Xml?很好,它已经消失了。

Mono是可嵌入的。您可以在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兼容的实现(尽管非常 SLOW) ,但Mono.Tasklet需要来自不属于CLI或.NET的VM的特殊支持。这用于游戏逻辑和例如在第二人生。

答案 1 :(得分:62)

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

答案 2 :(得分:24)

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

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

.Net会做一些单声道没有的事情。

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

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


注意:所有这些提前日期.Net Core / Standard。

答案 3 :(得分:13)

来自Mono的technical FAQ

  

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

     

有多种原因:

     

支持Windows有助于我们识别Mono的可移植部分   从它的非便携版本,   帮助Mono变得更加便携   未来。

     

它帮助我们,因为我们可以通过单独隔离问题   划分问题(是一个   运行时问题,还是OS问题?)。

     

Mono的贡献者大约有一半是Windows开发人员。他们有   许多不同的原因   为我们的努力做出了贡献   发现让它们变得非常重要   开发人员在Windows上运行运行时   没有强迫他们使用新的   操作系统。

     

Mono没有大量修改Windows注册表,更新系统DLL,   将DLL安装到Windows / System32   路径。

     

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

     

Mono和嵌入Mono的应用程序可以在没有的情况下部署   安装程序(你可以“xcopy”部署你的   申请和所需的单声道   没有安装.NET的文件   运行时)。

答案 4 :(得分:12)

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

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

答案 5 :(得分:8)

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

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

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

答案 6 :(得分:4)

主要是帮助开发Mono特定库的Mono应用程序。还有助于推进事业,使开发人员可以在开发Mono时在自然环境中工作。

答案 7 :(得分:3)

虽然没有引起广泛关注,但有一些情况下mono对标准Microsoft运行时有所改进。米格尔今年在PDC发表了一些关于其中一些问题的讨论:

请参阅以下帖子:

答案 8 :(得分:2)

即使您有与Mono动态链接的程序,您也可以在pendrive上安装已编译的.exe和Mono运行时并转到另一台未安装.NET / Mono的计算机,并在新PC上运行该程序而无需任何运行时安装。即,它导致便携式应用程序(特别适用于便携式USB笔式驱动器应用程序)   .NET无法实现这一点。您必须以特定的安装程序方式安装.NET运行时,即不能使用包含文件夹复制和粘贴的运行时。

答案 9 :(得分:1)

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

答案 10 :(得分:0)

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

答案 11 :(得分:-7)