编译基于 C# 的 Windows(WinForms 应用程序)应用程序以在 Mac OS High Sierra 或 Mojave 上运行

Posted

技术标签:

【中文标题】编译基于 C# 的 Windows(WinForms 应用程序)应用程序以在 Mac OS High Sierra 或 Mojave 上运行【英文标题】:Compile C# based Windows (WinForms App) application to run on Mac OS High Sierra or Mojave 【发布时间】:2018-11-25 10:33:17 【问题描述】:

我在 Windows 上用 C# 构建了一个(Windows 窗体应用程序)应用程序。现在,我想在不更改应用程序的情况下将整个项目/应用程序定位到 mac OS。有什么简单的方法可以实现吗?我不想在 MAC 上从头开始重建整个应用程序。我不想在 MAC 上使用虚拟机...我有 Visual Stuido 2017 和配对的 MAC。但是,我迷路了。

【问题讨论】:

我想你会选择 Mono,一个 .net 的开源实现。 如果你使用过 .net core 框架,你可以在 mac 上运行你的应用,前提是框架已经安装在那里。 我记得当我用它在 Linux 上编译一个 Windows 窗体项目时支持它们,它工作但我基本上有两个问题,一个是无法在它上面编辑 Windows 窗体(即使它运行Windows 窗体正常)以及使用 mysql 而不是 SQL Server 进行部署的必要性(但现在您拥有适用于 Linux 的 SQL Server) 这个 SO 问题就是你要找的 - ***.com/questions/22661589/… 也可以看看UNO平台platform.uno 【参考方案1】:

;TLDR Mono,使用WinForms 和MonoDevelop IDE 进行开发。

.NET Framework 是包含所有内容但仅在 Windows 上运行的完整实现。

.NET Core 是 .Net 框架的较新的开源实现,但不包括 WPF/WinForms - 因为它们严重依赖 DirectX/GDI,本质上使其仅适用于 Windows。

Xamarin。基于 Mono 框架的 Xamarin 更多地向 iosandroid 分支。有一个 Xamarin Mac,但它支持与 Mono 相同的基于 GTK# 的 UI 工具包。还有一个 WinForms 等效 UI 工具包,也称为 Xamarin Forms,但它仅适用于移动设备(iOS、Android 和通用 Windows 平台)

单声道。 Mono 是 .Net 框架的开源实现,UI 默认使用 GTK#。在所有 Windows、Linux、macOS 上运行良好。在包括 Windows 在内的所有操作系统上使用 GTK# 作为底层 UI 工具包。

什么是跨平台? 有一个基类库子集,称为 .NET 标准库 - 以及编译器平台,只有 .Net 的这些子集是真正的跨平台。

总结一下, 然而,Mono 在 Linux 和 macOS 上都支持Windows Forms。 除了一些极端情况外,它工作得很好。 但是,UI 外观仅适用于 Windows。这就像在 WINE 下运行 Windows 应用程序。默认 Mono IDE 为 MonoDevelop。

如果您想从头开始编写新应用程序,Xamarin Mac 非常棒,因为 Xamarin Mac 向您展示了完整的 macOS SDK 并提供了自己的 IDE (Xamarin Studio)。

不过,在您的情况下,Mono 是最佳选择。安装单声道后,您甚至可以尝试从终端以mono appName 的身份运行您当前的应用程序。即使路径和其他资源损坏,它也应该呈现 UI。

2021 年更新

WPF 和 WinForms 现在是开源的,并且是 .Net Core 的一部分(现在称为 .Net。Core 在名称中被删除)。以前的经典 .Net 现在称为 .Net 框架。新的 WPF/WinForms 功能增强功能仅适用于 .Net。尽管这些仍然只是 Windows,并且会一直如此。

Avalonia UI Framework 和 Uno Platform 是较新的基于 .Net Core (AKA .Net) 的跨平台解决方案。两者都使用 XAML。 Avalonia 更像 WPF,而 Uno 则试图成为跨平台的 UWP。

【讨论】:

谢谢。那么简单吗?我只是将 Mono 32bit 下载到我的 Windows 系统中并执行了之前编译的 WinForms 应用程序。它工作得很好。除了一些视觉故障,但可以接受的方式。非常感谢您的反馈!【参考方案2】:

您必须使用 .NET Core(不是 .NET Framework)才能在与 Windows 不同的操作系统上正确运行应用程序。

Differences between platforms explained

【讨论】:

“必须”可能不正确。就像您链接的内容一样,Xamarin 也有其独特之处。

以上是关于编译基于 C# 的 Windows(WinForms 应用程序)应用程序以在 Mac OS High Sierra 或 Mojave 上运行的主要内容,如果未能解决你的问题,请参考以下文章

c# 开发的winform软件 怎么样使其只能在xp系统下运行

如何为winform C#应用程序实现密码恢复[关闭]

c# winform中怎么截获处理windows关闭的消息 C#

c# winform程序.在控制面板中调整了DPI设置显示异常

编译基于 C# 的 Windows(WinForms 应用程序)应用程序以在 Mac OS High Sierra 或 Mojave 上运行

从零开始搭建基于CEFGlue的CB/S的winform项目