Mono真的是跨平台吗?

时间:2009-10-20 11:01:28

标签: .net windows linux macos mono

官方Mono项目网站称Mono在Windows,Linux和Mac OS X上成功运行。这是真的吗?
我想构建至少在Windows和Linux上运行的应用程序。 Mono可以吗?

P.S。我知道类似的主题已经存在(例如Cross platform .Net?),但它们可能已经过时了。

7 个答案:

答案 0 :(得分:10)

是的,这是可能的。

它通常运作良好,但我不认为Mono上有任何大中型应用程序。您可能需要浏览several other apps

由于Mono是真实内容(.NET)的一个子集,为了保持最佳兼容性,您可能必须在Mono支持的平台(例如Linux)中进行开发,然后一旦它在那里工作,您几乎可以肯定它适用于.NET。我这样说是因为虽然与.NET高度兼容,Mono并不像许多人认为完全与整个.NET堆栈兼容,并且other limitations也是如此。

我已经完成了它的开发,偶然发现了其中的几个。我希望你的项目没有和我一样多的.NET依赖项。

答案 1 :(得分:4)

确实如此。 Mono将在所有三个平台上运行,但是当您说“构建应用程序”时,您需要注意并非所有.net命名空间都已移植到Mono。他们非常注重移植“网络位”,因此编写一个可以跨平台工作的Web应用程序时不会有太多麻烦,但是如果您要编写客户端应用程序,则可能需要检查出月光项目,这是Linux的Silverlight实现。

答案 2 :(得分:2)

我还没有在Mono做过多少,但它的效果非常好。我建议你在Linux下开发。然后你可以非常肯定它也可以在Windows上工作(只要你不做硬编码路径等愚蠢的事情。)

答案 3 :(得分:1)

它是跨平台的,只是不要错误地在Windows上开发并使用未在Mono中实现的.NET库。例如,Mono不支持WebParts,即使是.NET。

答案 4 :(得分:1)

Mono非常适合创建适用于Windows和Linux的WinForms应用程序。如果您愿意,也可以使用GTK(一般来说,我发现WinForm UI在Windows下看起来稍微好一些,但在Linux下GTK界面看起来稍微好些,但根据您的应用程序,可能几乎没有什么区别)。

Web服务实现也非常出色(实际上优于Microsoft在IIS中的实现),并且可以在Windows,Linux和Mac OS上跨平台工作。

但是,如果这是你要走的道路,那么你必须考虑Mono来构建你的项目。在Visual Studio中创建的.NET项目很可能不会在没有(可能很大)修改的情况下在Mono下运行,因为并非所有.NET库都已实现 - 但Mono代码在Visual Studio中可以正常工作(假设它们不调用任何Mono特定库 - 但是当你在Mono。*命名空间中这样做时很明显。)。

Mono命令行应用程序在Mac OS中也运行良好,但Mac OS上的WinForms实现受到限制,因此如果考虑使用Mac OS,最好在XCode中创建本机GUI并将其连接到C#后端。 (与Windows和Linux不同)Mac OS上Mono的WinForms实现不是生产质量。

如果您有兴趣在Visual Studio中创建跨平台(Win / Linux / Mac OS)应用程序,我强烈建议您查看Delphi Prism。还有其他选择(MonoDevelop IDE,Eclipse,TextMate),但它很容易掌握,虽然不是免费的。

注意:与名称所暗示的相反Delphi Prism允许您在C#中编写Mono应用程序,而不仅仅是使用Delphi。它还使Mono应用程序与Mac OS GUI的连接变得更加容易,但移植到Mac OS仍然需要额外的努力(但不如移植到ObjC那么多!)。

最后,这不是您提出的问题,但可能对您感兴趣:您还可以考虑使用类似REALBasic的内容来创建GUI并在后台调用Mono中的捆绑应用程序(取决于你正在做什么样的应用程序,如果你不能在RB中使用Basic)。

答案 5 :(得分:0)

当然,这取决于您正在开发什么,以及您如何开发和测试它。这可能听起来很明显,但任何多平台应用程序都需要在您需要支持的每个平台上进行测试。

FWIW我创建了一个基于NAnt的Subversion管理工具,可以在Linux和Windows上使用Mono或Microsoft.NET交替运行。虽然我主要在Windows上使用它,但它在Linux上也能正常工作。

您还必须更加关注更精细的细节,例如始终使用Environment.NewLinePath.Combine,但这是件好事!

答案 6 :(得分:0)

排序,但不是那么多。请注意,根据单一项目网站,“其他”Linux平台“不受支持”http://www.mono-project.com/Other_Downloads

JavaScript和HTML5比其他任何东西都更具跨平台性。是的,您可以使用JavaScript开发游戏(Unity3D)和Web服务器应用程序(Node.js)和移动应用程序(Appcelerator等)

我最好的建议是,停止寻找银弹。当你找到它时,它将成为别的东西。