4

我想知道我不应该在代码中做什么会阻止我的 C# 应用程序在 mac 上运行。

4

5 回答 5

4

Mono 的应用程序可移植性指南是一个很好的参考。

于 2009-04-08T14:33:06.503 回答
4

一般来说,您不应该使用Microsoft.*命名空间中的任何内容,没有 PInvoke(DllImport在 C# 中)和 UI 也可能有问题。

有关 Mono 兼容性的更多信息包含在 Mono Guide Porting Winforms Applications中。可以使用迁移分析器工具检查现有应用程序的兼容性。

更新:PInvoke 实际上在 Mono 中工作,但如果你想让它跨平台工作,你必须为每个平台提供具有相同接口的本机共享库(即 Win API 很可能不起作用)。

于 2009-04-08T08:54:37.393 回答
1

除了 divo 的建议之外,我还推荐Mono Migration Analyzer (MoMA) 工具:“Mono Migration Analyzer (MoMA) 工具可帮助您识别在将 .Net 应用程序移植到 Mono 时可能遇到的问题”

另外,我会关注Miguel de Icaza 的博客Mono Project 网站

在他本月为 Boston.NET 用户组所做的演讲中,他展示了一个 Visual Studio 插件的预览,该插件可以使用 VM 在 Mono 上启动您的应用程序!这使您可以在开发过程中测试兼容性。

我相信他们的目标是在 TechEd 2009 上发布它,因此请在下个月左右寻找更新。

于 2009-04-15T12:58:44.743 回答
0

至少,您会想尽量避免使用 Windows 窗体,因为它只是 Windows 原生 UI 之上的薄薄的一层。

Mono 在 WINE 的帮助下在某种程度上模拟了它,但我不相信这一点。 Mono 前一阵子就这样做了,但这项努力被放弃了。有关更多信息,请参阅Mono 上的 WinForms 。谢谢jpobst

尝试使用 GTK# 或 Qt#(虽然我不太确定后者是否真的存在)来支持跨平台。您也可以考虑将 Java 与 SWT 甚至 Swing 一起使用而不是 C#,但这可能不是您愿意考虑的选项。

使用与 P/Invoke 相关的任何东西可能也是一个坏主意,因为这会调用可能不可移植的本机代码(除非您自己编写它,否则您可以选择使其可移植)。

于 2009-04-08T08:56:58.417 回答
-2

我不确定单声道是否可行,但 WIN32 API 调用肯定不起作用;)

于 2009-04-08T08:56:10.837 回答