这可能是一个愚蠢的问题......但我只是在研究Mono项目,他们有一个关于安装Mono on Windows的部分。但是,由于Windows显然已经拥有.NET运行时,任何人都可以告诉我Mono for Windows究竟是什么意思?它对跨平台开发有帮助吗?
答案 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存在一些差异,因此在Windows上坚持使用单声道可以更好地保证兼容性。
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)