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

13

嘿,伙计们,我正在编写一款跨平台的应用程序。直到最近,我一直在尝试使用Silverlight和C#来实现这一点,因为它也可以在OS X上运行,但是由于我对C#不够熟练,再加上我对Silverlight不熟悉,我遇到了一个又一个的问题。大部分源于被设计为在浏览器中运行的应用程序所带来的限制,以及从我的开发服务器运行时与直接从file://运行时运行不同的问题等。

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

使用Mono将.NET应用程序移植到OS X有多难?我的应用程序相当简单,表单或其他任何东西都没有什么奇特之处,因此我必须假设它会在Mono的WinForms实现中得到支持。

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

请原谅我对这个主题的彻底无知,我只有在遇到Silverlight中又一个烦人的限制后10分钟才开始考虑走这条路。

我将是第一个承认我对这个主题一窍不通,所以要温柔一点.. :)


1
这可能会有所帮助:http://www.mono-project.com/MoMA - Nick
如果你想要编写一个具有适当Cocoa界面的程序,你也可以看看MonoMac http://www.mono-project.com/MonoMac - Luke
MoMA现在已经过时了,但是有一个名为.NET Portability Analyzer的Visual Studio扩展可以分析您的程序集在多个平台上的可移植性,包括Mono。 - Malcolm
4个回答

5
除了其他答案中提到的MoMa之外,您可能会对MonoMac感兴趣。随着MonoTouch(为iPhone编写c#)的成功,现在还有一个名为MonoMac的项目,可以创建原生UI以在OSX上使用.net/mono作为后台。这可能对您很有趣,了解更多请访问http://www.mono-project.com/MonoMac,其中包括Miguel de Icaza博客上的文章:http://tirania.org/blog/archive/2010/Apr-19.html

2

除了已经提到的内容之外,考虑到Mono支持完整.NET功能的子集,如果目标是在两个平台上运行,我可能更喜欢在Mono上进行开发,然后针对Microsoft的运行时进行测试。否则,您有可能无意中使用了一些Mono不支持的功能,在进行跨平台构建和测试时,不得不放弃大量代码。


1

有几件事情你需要记住:

  1. 你需要移植任何使用平台相关的用户界面代码。
  2. 不要使用平台相关的操作系统调用(win32 api)。
  3. 不要使用“奇特”的库(例如workflow,可悲地是ef)。
  4. 总的来说:将依赖性抽象到这样的代码中,以便于你可以轻松地用特定于mono的库进行替换。 (建议使用MVVM模式)。

有一个工具叫做 MoMA 可以帮助你完成所有这些操作。无论如何,只要尝试一下就好了,但请记住:采用谨慎的态度看待其结果。


在大多数情况下,最后两个句子是无效的 :) 除非你在Mono上运行应用程序,否则你永远不会知道其中一些问题。MoMA是一个不错的工具,但它并非万能药。 - Lex Li

1

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