使用Mono将C#.NET应用程序移植到OS X?

时间:2011-02-01 11:49:17

标签: c# .net winforms macos mono

好吧,伙计们,我正在编写一个我想要跨平台的应用程序。直到最近,我一直在尝试使用C#在Silverlight中执行此操作,因为它也可以在OS X上运行,但是除了对Silverlight不熟悉之外,我对C#相当生疏,但是在头痛之后我遇到了头痛。其中大部分源于一个旨在在浏览器中运行的应用程序所带来的限制,当从我的开发服务器运行时直接从文件://等运行时,它的运行方式不同。

我宁愿完全放弃整个OS X的支持理念,而不是完全重写OS X的应用程序,特别是因为我完全没有为它编写的经验。我希望能够做的是使用Visual Studio for Windows在C#.NET中编写常规应用程序,然后使用Mono轻松将其移植到OS X.

使用Mono将.NET应用程序带到OS X有多难?我的应用程序相当简单,表单或任何内容都没有任何异国情调,所以我必须假设它在Mono的WinForms实现中得到支持。

有没有关于如何使用Mono移植应用程序的好资源?或者,也许,我错过了整点,它只是让你在OS X上运行.NET应用程序而我不需要打扰移植?

原谅我对这个问题一无所知,我只是在10分钟前开始考虑在Silverlight中遇到另一个恼人的限制之后走这条路。

我将成为第一承认我不知道我的屁股关于这个主题,所以要温柔.. :)

4 个答案:

答案 0 :(得分:5)

来自MoMa的公寓,如其他答案所述,您可能对MonoMac感兴趣。 随着MonoTouch的成功(为iPhone编写c#),现在还有一个名为MonoMac的项目,用于在后台使用.net / mono时为OSX创建本机UI。你可能会感兴趣http://www.mono-project.com/MonoMac,关于Miguel de Icaza博客的文章:http://tirania.org/blog/archive/2010/Apr-19.html

答案 1 :(得分:2)

除了已经说过的内容,考虑到Mono支持完整.NET功能的一个子集,我可能更喜欢在Mono上开发,然后针对Microsoft的运行时进行测试,如果目标是在这两个上运行。否则,您冒着无意中使用Mono中不可用的某些功能的风险,并且在您进行跨平台构建和测试时必须从窗口中抛出大量代码。

答案 2 :(得分:1)

你应该记住几件事。

  1. 您必须移植平台从属UI代码的任何用法
  2. 不要使用平台相关的OS调用(win32 api)
  3. 不要使用“异国情调”的图书馆(如工作流程,遗憾的是ef)
  4. 一般来说:抽象依赖于此类代码,因此您可以使用单一特定的库轻松替换它们。 (一个明确的模式是MVVM)。
  5. 有一个名为MoMA的工具可以帮助您完成所有这些工作。但是,用一粒盐取结果。无论如何,试试吧。

答案 3 :(得分:1)

Mono项目有一个专门介绍如何移植应用程序的页面,

http://mono-project.com/Guidelines:Application_Portability

然而,它永远不够,因为您的应用程序在很多方面都是独一无二的。

尝试移植它并在必要时向Mono人报告问题。此外,如果您在公司工作,请考虑Mono的商业支持服务,

http://mono-project.com/Support