Mono真的是跨平台的吗?

8

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

P.S. 我知道类似的话题已经存在(例如跨平台.Net?),但它们可能已经过时。


5
一般来说,如果一个东西旨在实现跨平台,它会变得越来越好,而不是变得更糟。因此,即使你发现过时的信息,你应该能够假设它仍然至少像那些信息所说的一样好。 - Matthew Scharley
1
看看这个链接,有一些关于类似主题的有趣讨论:https://dev59.com/UHRB5IYBdhLWcg3wAjNH。 - RameshVel
1
我们通过我们的产品来谋生... - pablo
7个回答

10

是的,这是可能的。

它通常运行得很好,但我不认为有任何大型/中型应用程序是基于Mono的。您可以浏览其他几个应用程序

Mono是真实 .NET 的一个子集,为了保持最佳兼容性,您可能需要在Mono支持的平台(例如Linux)上进行开发,然后一旦它在那里正常工作,您就可以非常确定它将在 .NET 上工作。我这么说是因为虽然与 .NET 高度兼容,但Mono并不像许多人想象的那样 完全 兼容整个 .NET 技术栈,并且有其他限制

我曾经在上面开发过,并遇到了其中的几个限制。我希望您的项目没有像我的一样有太多 .NET 依赖项。


是的,有很多使用Mono编写的严肃应用程序。你在GNOME桌面上获取的许多程序都是使用Mono编写的。 - Jesper
1
Monodevelop(集成开发环境)相当庞大,可在Windows、Mac和Linux上运行。据我所知,他们正在努力让Banshee(媒体播放器)在Windows上运行。 - sgwill
Second Life脚本语言或Wikipedia搜索实现如何不是大规模应用程序?是的,它们在Mono上运行。 - skolima

4

当然可以。Mono 可以在三个平台上运行,但是需要注意的是,并非所有 .net 命名空间都已经移植到 Mono 上。他们将重点放在了移植 "Web bits" 上,因此编写跨平台 Web 应用程序应该不会遇到太多麻烦,但如果你想编写客户端应用程序,则可能需要查看 Moonlight 项目,这是 Linux 上的 Silverlight 实现。


1
我不确定OP是否在谈论Silverlight/Moonlight/Web应用程序,而是桌面应用程序。桌面应用程序应该很容易实现跨平台。 “构建应用程序”并不一定意味着Silverlight/Moonlight/WPF,而可以是经典的Forms。 - Thorsten Dittmar
2
不好意思,请问Silverlight与客户端应用程序有什么关系?我以为这是某种Flash克隆?此外,System.Windows.Forms命名空间已完全移植,并且自很长时间以来就有GTK#绑定。 - Bobby
我完全同意,我的意思是你不能期望一个WPF应用程序在Linux上运行,即使在表单空间中,在.net中的Win32API绑定和Linux上的GDK#绑定之间也存在一些怪癖,而这些问题在Web应用程序中不太会存在。 - lomaxx
嗯,Sergey 正在谈论 Mono 应用程序……所以我想他也想在 Windows 上使用 Mono,而不是根据平台在 Mono 和 .NET 之间切换。而且在 Mono 中不应该有任何特定于平台的…嗯…需求,对吧? - Bobby
1
Silverlight与Flash有相似之处,但更加针对生产商业应用程序。使用第3版的Silverlight完全可以制作客户端桌面应用程序。 - Alan B

2

我在Mono方面还没有做过太多的工作,但它确实运行良好。我建议您在Linux下进行开发。这样你就可以非常确定它也能在Windows上运行(只要你不做一些愚蠢的事情,比如硬编码路径等)。


你还没有做太多的事情,但是你所做的少量工作却非常好?那有什么用处? - NT_
1
尽管我没有开发过大型项目,但我立刻就感觉到了 Mono 的“亲切”。我没有说过类似于“我从未见过它,但是是的,它是100%兼容”的话 - 所以即使价值不高,我的回答也至少有一点点价值。 - Thorsten Dittmar

1

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


1

Mono非常适合创建在Windows和Linux上运行的WinForms应用程序。如果您喜欢,也可以使用GTK(总体而言,我发现WinForm UI在Windows下看起来稍微好一些,GTK界面在Linux下看起来稍微好一些,但根据您的应用程序,可能几乎没有区别)。

Web服务实现也非常出色(事实上比IIS中的Microsoft实现更好),并且可以跨平台在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不同)Mono在Mac OS上的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)。


0

有点类似,但并非完全一样。请注意,在 Mono 项目网站上指出,“其他” Linux 平台是“不受支持的” http://www.mono-project.com/Other_Downloads

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

我最好的建议是,停止寻找“银弹”。当你找到它时,它已经变成了其他东西。


0

是的。

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

FWIW,我创建了一个基于NAnt的Subversion管理工具,可以使用Mono或Microsoft.NET在Linux和Windows上运行。尽管我主要在Windows上使用它,但在Linux上也同样有效。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接