今晚花一些时间,总结net程序如何在linux环境运行的一些技术路线。
1、采用.Net Core框架
NET Core 使用了 .NET Core Runtime,它可以在 Windows、Linux 和 macOS 等多个操作系统上运行。可以采用Visual Studio生成Linux版本的dll。 在Linux系统中,需要安装dotnet的运行环境(sudo yum install dotnet-sdk-2.1)。最后通过dotnet xx.dll即可运行程序。
2、采用Mono框架
Mono 是一个开源的跨平台实现的 .NET 框架,旨在让开发者能够在不同操作系统上使用 .NET 进行开发和运行应用程序。Mono 努力实现与 .NET Framework 的兼容性,使得许多基于 .NET 的应用能够迁移到 Mono 并正常运行。这包括支持大部分的 .NET API。Mono 包括一个运行时(称为 Mono Runtime)和一个C#编译器,使得开发者能够编写和执行 C# 和其他 .NET 语言编写的代码。
注意:Mono有自己的打包、执行方法。因此本文后面的内容跟Mono无关。
3、可执行程序类型
在Linux可运行的包括控制台应用、可执行程序、Asp.net web等。
需要注意如果希望在linux容器下运行,Asp.net web应用需要在Visual Studio勾选【启用Docker 支持】。
4、打包手法
这里的打包是最终交付到linux的环境。
1)dll、exe类。
该模式需要donet命令行进行启动。
2)基于dotnet-packaging插件
打包成linux环境下的deb格式。该模式可以直接双击打开。详见
dotnet-packaginghttps://github.com/quamotion/dotnet-packaging
3)基于AppImage。
AppImage 是一种用于在 Linux 上分发和运行应用程序的开放标准格式。它的设计目标是简化应用程序安装和发布的过程,使得开发者能够创建便于用户使用的便携式应用程序包。
5、用户界面
1)基于Avalonia:
Avalonia 是一个开源的跨平台用户界面框架,主要用于构建桌面应用程序。它旨在使开发者能够使用类似于 WPF(Windows Presentation Foundation) 的 XAML(可扩展应用标记语言)来创建富有吸引力的用户界面,同时支持多个平台,包括 Windows、Linux 和 macOS。
2)基于GTKSystem:
C#桌面应用程序跨平台(windows、linux、macos)界面开发组件,基于GTK组件开发,该组件的核心优势是使用C#的原生winform表单控件窗体设计器,相同的属性方法,C#原生开发即可,无需学习。一次编译,跨平台运行。
类似的还有Eto.Forms、GTK。
3)基于CPF:
简洁、直观、强悍的netcore跨平台UI开发框架框架理念和WPF类似,但是没有Xaml,直接用CSS和C#代码描述。CPF .net跨平台UI框架 (cskin.net)
4)基于Uno Platform
Uno平台能够创建像素级完美的,只通过C#+XAML编写的应用程序,能够跨平台运行在Windows,iOS,安卓,macOS,Linux和Web上,Uno 平台是免费和开源的。
5)基于NET Maui
.NET Maui 是 Xamarin Forms 的下一个演变,允许真正的“编写一次;随处运行“体验。但.NET Maui 不支持Linux环境哦,支持Mac等。
6、采用兼容层WINE程序执行
Wine 是一个开源的兼容层,允许在类 UNIX 操作系统(如 Linux 和 macOS)上运行 Windows 应用程序。Wine 并不是模拟 Windows 操作系统,而是通过对 Windows API 的实现,使得 Windows 应用程序能够直接运行在 Linux 等平台上。
采用WINE可以直接执行net程序。当然也可能面临一些运行卡顿或者不能执行的情况。
- Windows 专有组件和服务:如某些使用 .NET Framework、Windows Media Player、ActiveX 控件等特定 Windows 组件的程序在 Wine 中可能无法正常工作。
- 依赖 COM 组件的程序:某些程序需要使用 Windows 的 COM(组件对象模型)服务,在 Wine 的支持可能不足。
- CAD 软件:许多专业的 CAD 应用程序可能在图形表现和功能方面受限,不如在本地 Windows 环境中运行时表现好。
- 3D 建模软件:虽然有些可能成功运行,但对高级图形的支持可能不足。
Wine还提供了一个名为WineTricks的工具。可以帮助用户解决运行Windows应用程序时遇到的一些常见问题。类似的,还有工具VirtualBox,VirtualBox提供全面的windows环境,但资源消耗更大。。