【问题标题】:Making a C#/Winform application cross-platform - should I use AIR, Mono, or something else?使 C#/Winform 应用程序跨平台 - 我应该使用 AIR、Mono 还是其他东西?
【发布时间】:2008-09-16 14:01:31
【问题描述】:

我有一个用 C#/WinForms (my little app) 编写的应用程序。为了使其跨平台,我正在考虑在 Adob​​e AIR 中重做它。是否有任何支持 WinForms 作为跨平台应用程序的论据? Winforms(例如 Mono 等)是否有跨平台的未来?对跨平台 UI 开发的建议?

我所说的跨平台是指目前的 Mac OSX、Windows 和 Linux。

这个问题是asked again and answered with better success

【问题讨论】:

  • 让我看看我的水晶球...
  • 水晶球不错,但基于事实的推测也很酷。
  • 回到十年前还不存在的一些较新的解决方案:用于 winforms 的 Eto.Forms、用于 WPF 的 Avalonia、用于 C# Web 应用程序的 Blazor。 ASP.Net 仍然有效,但我觉得它正在失去优势。 Gtk# 有点晦涩,不是原生 C#,但也能正常工作。银光死得很惨。仅供未来的读者阅读。

标签: c# winforms cross-platform


【解决方案1】:

就我在 Flex/AIR/Flash 动作脚本方面的经验而言,Adobe AIR 开发环境和编码/调试工具集目前远不如 Visual Studio 和 .NET SDK。不过,UI 工具集非常出色。

但由于您已经有一个可以工作的 C# 代码,将其移植到 ActionScript 可能需要重新设计,因为 ActionScript 具有不同的思维/编程方式,它们使用不同的原始数据类型,例如,他们只使用 Number 而不是 int float double 等,与 VS IMO 相比,调试工具非常缺乏。

我听说Mono's GtkSharp 是一个安静的平台。

但是,如果您不介意编码/调试工具问题,那么 AIR 是一个很棒的平台。我喜欢 Adob​​e 如何将 Flash 体验集成到其中,例如您可以通过单击 Flash 影片剪辑中的按钮开始安装 AIR 应用程序,这种集成。

【讨论】:

  • 抱歉,我刚刚更改了问题:我需要适用于 Mac、PC 和 Linux 的东西。同时,我发现在 Flex 中构建 UI 组件和任何类型的严肃的 UI 工作都比在 .Net 中容易 20 倍——如果使用纯 Flash 作为选项的话。但这是一种意见。
  • 啊,说得好。但我的观点是,您已经拥有工作 C# 代码,因此与仅将其移植到 Mono 相比,移植到 AIR 可能会重写。
  • 关于工具,我指的是调试/编码工具。 Flash 平台无疑拥有出色的 UI 工具 :-) 现在编辑我的答案
  • 但是,如果你想使用 GtkSharp,你也要重写! Mono 支持 WinForms,因此请按原样使用 Mono/Winforms!
  • 我不明白的是,如果 GtkSharp 真的适用于 Mac,或者它是否需要 Gnome。也许我必须为此提出另一个问题。谢谢!
【解决方案2】:

我正在考虑在 Adob​​e AIR 中重做它

没有花太多时间在 AIR 上,我个人认为最好将 web 应用程序带到桌面并为其提供 shell 或在桌面上运行现有的 flash/flex 项目。

顺便说一句,如果您不了解 ActionScript,我指的是它的详细信息、怪癖等,请不要忘记在谷歌上搜索答案所需的时间。

是否有任何支持 WinForms 作为跨平台应用程序的论据? Winforms(例如 Mono 等)是否有跨平台的未来?

总是很难预测会发生什么,但我知道至少有一个项目(Plastic SCM)在 Win、Mac 和 Linux 上使用 Mono Winforms,所以它肯定是可行的。然而,他们说他们从头开始构建了大部分控件(并声称他们希望将它们作为开源发布,但不确定是否或何时发布),因此您需要投入一些工作以使事情看起来“漂亮” .

我在非 Windows 平台上玩过 Winforms,不幸的是,它并不完全“成熟”(尤其是在 Mac 上)。因此,开箱即用的内容可能足以满足您的需求,也可能不足以满足您的需求。

如果您认为桌面应用程序不是提供跨平台解决方案的最佳方式,您可以随时使用用 C# 编写的业务逻辑,并使用 ASP.NET 或使用 Silverlight 创建一个成熟的 Web 应用程序,所以C# 还有许多其他选项。

【讨论】:

  • 感谢您的知情回答,entell。我不知道为什么人们认为 AIR 是“将 web 应用程序带到桌面的最佳选择”。 AIR 应用程序有什么特别的限制吗?毫无疑问,您对非 Windows WinForms 的结论是可悲但真实的。是的,回复:银光。感谢您的回答。
  • 几个月后:是的,AIR 存在严重限制。一方面,它不能执行任意代码,也不能轻松操作大 XML。那是两个……
【解决方案3】:

Mono 完全支持 WinForms,因此它们是跨平台的。

【讨论】:

    【解决方案4】:

    您为什么选择 Air?

    使用GTK#,你就有了一个跨平台的表单引擎,你可以保留你的C#代码。

    【讨论】:

    • 对不起,我在 9 月份忽略了这个答案。现在我在 3 天内在 Mono 上完成了 Winforms 的移植,它为我工作了 90%……现在我正在购买其余的。 GTK# 可能会这样做...再次感谢。
    【解决方案5】:

    我认为使用 C# 可靠地跨平台的唯一方法是 Microsoft Silverlight,但不是真正的 WinForms,并且基于浏览器。除此之外,是的,Mono 是一个机会。

    【讨论】:

    • 你太轻视单声道了。
    • 讽刺地夸大了月光,因为它依赖于 Mono 并且还没有完成。如果您的意思是跨平台 == Windows 和 Mac,那么也许是 Silverlight。
    • 有趣!我从没想过,但你是对的......虽然 Silverlight 可能永远不会得到很好的采用,但它现在可能并不比 Adob​​e AIR 差。
    【解决方案6】:

    如果您想使用 .net 框架,Microsoft Silverlight 是一个不错的(唯一的?)选择。浏览器作为外壳做得很好,但您也可以为它编写自己的应用程序外壳。例如,Scott Handelman mentions NY Times Reader 在 Mac 上使用 Silverlight 和 Cocoa 上的 hostet 编写。

    【讨论】:

    • 原谅我的无知,Silverlight 运行真正的 C# dll 吗?
    【解决方案7】:

    我认为 WinForms 根本没有未来。因为即使在 MSFT 世界中它似乎也是一个权宜之计(Win32 的一个非常薄的包装器)。在 .NET 3.0 和 3.5 中几乎没有对 System.Windows.Forms 进行任何更改

    </speculation>
    

    我会使用 Java 或 Air。

    【讨论】:

    • 为什么会被否决? .net 3.0 和 3.5 中是否对 Winforms 进行了更改?
    【解决方案8】:

    我认为只要您确保您编写的业务逻辑代码是跨平台的(即在路径中使用反斜杠仅适用于 Windows - 正斜杠适用于所有操作系统),那么 Mono 应该不会有大问题运行未经修改的 WinForms 程序。只需确保测试图形故障即可。

    【讨论】:

    • 如果您使用 System.IO.Path.Combine 构建路径,它会自动使用适合底层操作系统的值。
    【解决方案9】:

    上周我问了一个类似的问题。我一直在使用 Mono,并且在运行我编译到 IL 以在 SuSE linux(我通常运行 KDE)或 windows 上运行的应用程序时没有遇到任何问题,但是,我还没有出去并得到一个尚未测试的 mac它在。不过,我很快就会到,可能在几周后。但是 Mono 中的所有开发都非常擅长创建将在多个平台上运行的应用程序。

    【讨论】:

      猜你喜欢
      • 2017-05-22
      • 1970-01-01
      • 2014-02-10
      • 2011-06-11
      • 1970-01-01
      • 2011-04-03
      • 2011-11-04
      • 1970-01-01
      • 2011-02-02
      相关资源
      最近更新 更多