官方的Mono项目网站称,Mono可以在Windows、Linux和Mac OS X上成功运行。这是真的吗?
我想构建至少能在Windows和Linux上工作的应用程序。使用Mono是否可行?
P.S. 我知道类似的话题已经存在(例如跨平台.Net?),但它们可能已经过时。
官方的Mono项目网站称,Mono可以在Windows、Linux和Mac OS X上成功运行。这是真的吗?
我想构建至少能在Windows和Linux上工作的应用程序。使用Mono是否可行?
P.S. 我知道类似的话题已经存在(例如跨平台.Net?),但它们可能已经过时。
是的,这是可能的。
它通常运行得很好,但我不认为有任何大型/中型应用程序是基于Mono的。您可以浏览其他几个应用程序。
Mono是真实 .NET 的一个子集,为了保持最佳兼容性,您可能需要在Mono支持的平台(例如Linux)上进行开发,然后一旦它在那里正常工作,您就可以非常确定它将在 .NET 上工作。我这么说是因为虽然与 .NET 高度兼容,但Mono并不像许多人想象的那样 完全 兼容整个 .NET 技术栈,并且有其他限制。
我曾经在上面开发过,并遇到了其中的几个限制。我希望您的项目没有像我的一样有太多 .NET 依赖项。
当然可以。Mono 可以在三个平台上运行,但是需要注意的是,并非所有 .net 命名空间都已经移植到 Mono 上。他们将重点放在了移植 "Web bits" 上,因此编写跨平台 Web 应用程序应该不会遇到太多麻烦,但如果你想编写客户端应用程序,则可能需要查看 Moonlight 项目,这是 Linux 上的 Silverlight 实现。
我在Mono方面还没有做过太多的工作,但它确实运行良好。我建议您在Linux下进行开发。这样你就可以非常确定它也能在Windows上运行(只要你不做一些愚蠢的事情,比如硬编码路径等)。
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)。
有点类似,但并非完全一样。请注意,在 Mono 项目网站上指出,“其他” Linux 平台是“不受支持的” http://www.mono-project.com/Other_Downloads。
JavaScript 和 HTML5 比其他任何技术更具跨平台性。是的,你可以使用 JavaScript 来开发游戏(Unity3D)、Web 服务器应用程序(Node.js)和移动应用程序(Appcelerator 等)。
我最好的建议是,停止寻找“银弹”。当你找到它时,它已经变成了其他东西。
是的。
当然,这取决于您正在开发什么以及如何开发和测试它。这可能听起来很明显,但任何多平台应用程序都需要在您需要支持的每个平台上进行测试。
FWIW,我创建了一个基于NAnt的Subversion管理工具,可以使用Mono或Microsoft.NET在Linux和Windows上运行。尽管我主要在Windows上使用它,但在Linux上也同样有效。
您还必须更加关注细节,例如始终使用Environment.NewLine
和Path.Combine
,但这是一件好事!