如何在 Linux 上为 .NET Core 编译 Windows.Forms 应用程序?

Mar*_*tin 15 c# linux winforms

我可以使用 mono mcs 在 Linux 上编译我的应用程序,但结果是 .NET Framework 4.5 的可执行文件。在 Windows 上它可以运行,但我无法使用任何更新的功能。

我试图找出如何使用 .NET SDK 5.0 编译它,但在 Linux 上它似乎不包含 Windows 窗体。

有没有办法在至少使用 .NET Core 2.0 的 Linux 上编译表单应用程序?

PMF*_*PMF 15

Windows 窗体(和 WPF)在带有 .NET Core 的 Linux 上不受支持,而且可能永远不会受支持。Winforms 在 mono 上运行,但它基于 .NET Framework,而不是 .NET Core。原因主要是因为 Windows 窗体的内部实现实际上是 Windows GDI 之上的抽象层,因此 Linux 移植需要完全重写。

.NET 6.0将带来一个名为maui的新GUI框架,旨在为.NET带来真正的跨平台体验。这有望成为使 .NET 真正跨平台的最后一步,因为它实际上是 20 年前设计的。您已经可以尝试一下,因为 .NET 6.0 的预发布版本已可供下载(请访问https://aka.ms/dotnet-download)。

  • 它提供了有价值的见解,但存在一些问题 1) Mono 没有完整的 WPF 故事,因此“它们在 Mono 上运行”并不准确。2) “Linux 移植需要完全重写”是正确的,但原因是 Microsoft WinForms 不是开源的。3) MAUI 不会来自支持 Linux 的 Microsoft,https://github.com/dotnet/maui/discussions/339,但需要社区来创建和支持。 (4认同)
  • WinForms 相对简单,十年来几乎没有变化,并且已经有(尽管有缺陷)适用于 .NET Framework 的 Linux WinForms 代码。对于几个有才华的人来说,在 .NET Core 上实现 WinForms 有那么困难吗?当我第一次听说 MAUI 时,我抱有很高的期望,但在看到在桌面上运行移动应用程序时,它只是一个笨重而复杂的混乱,我放弃了它。同样,MAUI 看起来并不像 WinForms/WPF 那样的桌面 GUI 框架,而更像是恰好能够在 Windows 上运行的移动 GUI 框架。 (2认同)