我想知道我不应该在代码中做什么会阻止我的 C# 应用程序在 mac 上运行。
5 回答
Mono 的应用程序可移植性指南是一个很好的参考。
一般来说,您不应该使用Microsoft.*
命名空间中的任何内容,没有 PInvoke(DllImport
在 C# 中)和 UI 也可能有问题。
有关 Mono 兼容性的更多信息包含在 Mono Guide Porting Winforms Applications中。可以使用迁移分析器工具检查现有应用程序的兼容性。
更新:PInvoke 实际上在 Mono 中工作,但如果你想让它跨平台工作,你必须为每个平台提供具有相同接口的本机共享库(即 Win API 很可能不起作用)。
除了 divo 的建议之外,我还推荐Mono Migration Analyzer (MoMA) 工具:“Mono Migration Analyzer (MoMA) 工具可帮助您识别在将 .Net 应用程序移植到 Mono 时可能遇到的问题”
另外,我会关注Miguel de Icaza 的博客和Mono Project 网站。
在他本月为 Boston.NET 用户组所做的演讲中,他展示了一个 Visual Studio 插件的预览,该插件可以使用 VM 在 Mono 上启动您的应用程序!这使您可以在开发过程中测试兼容性。
我相信他们的目标是在 TechEd 2009 上发布它,因此请在下个月左右寻找更新。
至少,您会想尽量避免使用 Windows 窗体,因为它只是 Windows 原生 UI 之上的薄薄的一层。
Mono 在 WINE 的帮助下在某种程度上模拟了它,但我不相信这一点。
Mono 前一阵子就这样做了,但这项努力被放弃了。有关更多信息,请参阅Mono 上的 WinForms 。谢谢jpobst。
尝试使用 GTK# 或 Qt#(虽然我不太确定后者是否真的存在)来支持跨平台。您也可以考虑将 Java 与 SWT 甚至 Swing 一起使用而不是 C#,但这可能不是您愿意考虑的选项。
使用与 P/Invoke 相关的任何东西可能也是一个坏主意,因为这会调用可能不可移植的本机代码(除非您自己编写它,否则您可以选择使其可移植)。
我不确定单声道是否可行,但 WIN32 API 调用肯定不起作用;)