如何将 C# 应用程序从 windows 移植到 linux?
How to port C# applications from windows for linux?
Windows.Forms 库包含许多有效阻止应用程序运行的错误。 WinForms Designer 无法将 WebBrowser 控件放在窗体上。 NotifyIcon class 在 LXDE 下不起作用(请参阅 KeePass 的错误跟踪器)。剪贴板 class 与计算 Linux 的默认管理器不兼容。拖放在 DockPanelSuite 中有问题。由于不透明度问题,WinForms Designer 未完成。 WPF 从未实施过,也没有实施的计划。
单声道团队说 "we don't want to develop WinForms, because this is old technology."
一个端口桌面C#应用程序应该如何从Windows到Linux?用Gtk#重写好像太难了...
修复单声道 WinForms、实现 WPF 或将世界上所有应用程序重写为 Gtk# 哪个更容易?
如您所知,Mono WinForms 实现仅适用于非常简单的应用程序。查看 Xamarin 员工 Mike James 的 "Cross-Platform Desktop UIs" 博客 post,他总结了可用的解决方案:
- 传统方法
WPF or WinForms frontend on Windows, GTK# frontend on Linux and Xamarin.Mac Mac OS X. IMO 这是最好的方法,如果您在应用程序中正确分离了业务层和表示层,它可能比看起来更容易。
- XWT
XWT 工具包使用相同的 API 并在所有平台上提供原生外观,但只实现了有限的组件子集。它对您的项目的可用性取决于您真正需要的组件。
- HTML 前端
使用简单的 WebView 组件或 Awesomium HTML UI Engine 创建 HTML 前端。这在某些情况下可能是一个可行的选择,但我不确定是否可以用这种方法实现系统托盘图标。
- QTSHARP
旨在为多平台 QT 工具包实施 .NET 绑定的开源项目。我从未尝试过,但根据项目网站,它似乎处于早期阶段,目前仅在 Windows 上进行过测试。
顺便说一句,我目前正在为 Pkcs11Admin 应用程序使用 WinForms,但我计划在任何支持的平台上遇到阻止程序错误时立即使用传统方法。
Windows.Forms 库包含许多有效阻止应用程序运行的错误。 WinForms Designer 无法将 WebBrowser 控件放在窗体上。 NotifyIcon class 在 LXDE 下不起作用(请参阅 KeePass 的错误跟踪器)。剪贴板 class 与计算 Linux 的默认管理器不兼容。拖放在 DockPanelSuite 中有问题。由于不透明度问题,WinForms Designer 未完成。 WPF 从未实施过,也没有实施的计划。
单声道团队说 "we don't want to develop WinForms, because this is old technology."
一个端口桌面C#应用程序应该如何从Windows到Linux?用Gtk#重写好像太难了...
修复单声道 WinForms、实现 WPF 或将世界上所有应用程序重写为 Gtk# 哪个更容易?
如您所知,Mono WinForms 实现仅适用于非常简单的应用程序。查看 Xamarin 员工 Mike James 的 "Cross-Platform Desktop UIs" 博客 post,他总结了可用的解决方案:
- 传统方法
WPF or WinForms frontend on Windows, GTK# frontend on Linux and Xamarin.Mac Mac OS X. IMO 这是最好的方法,如果您在应用程序中正确分离了业务层和表示层,它可能比看起来更容易。 - XWT
XWT 工具包使用相同的 API 并在所有平台上提供原生外观,但只实现了有限的组件子集。它对您的项目的可用性取决于您真正需要的组件。 - HTML 前端
使用简单的 WebView 组件或 Awesomium HTML UI Engine 创建 HTML 前端。这在某些情况下可能是一个可行的选择,但我不确定是否可以用这种方法实现系统托盘图标。 - QTSHARP
旨在为多平台 QT 工具包实施 .NET 绑定的开源项目。我从未尝试过,但根据项目网站,它似乎处于早期阶段,目前仅在 Windows 上进行过测试。
顺便说一句,我目前正在为 Pkcs11Admin 应用程序使用 WinForms,但我计划在任何支持的平台上遇到阻止程序错误时立即使用传统方法。