让C#程序在linux环境运行

ops/2024/9/22 13:35:09/

今晚花一些时间,总结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-packagingicon-default.png?t=O83Ahttps://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环境,但资源消耗更大。。


http://www.ppmy.cn/ops/114266.html

相关文章

[go] 命令模式

命令模式 将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。 模型说明 触发者类负责对请求进行初始化,其中必须包含一个成员变量来存储对于命令对象的引用。触发命令,而不同接受者直接…

深度学习02-pytorch-06-张量的形状操作

在 PyTorch 中,张量的形状操作是非常重要的,可以让你灵活地调整和处理张量的维度和数据结构。以下是一些常用的张量形状函数及其用法,带有详细解释和举例说明: 1. reshape() 功能: 改变张量的形状,但不改变数据的顺序…

C#描述-计算机视觉OpenCV(6):形态学

C#描述-计算机视觉OpenCV(6):形态学 前言阈值化二值图像腐蚀与膨胀算法形态学滤波器开启和闭合运算原理概括 前言 这是本系列第六节,主要是介绍基础的形态学运用。 形态学主要是分析图像中不同主题的形态,它定义了一系…

基于SpringBoot+Vue的宠物医院管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

unity 高性能对象池解决方案

对于一个高性能对象池应该有的功能: 支持多种对象、同步加载、异步加载、隐藏方式、自动收缩(使用LRU缓存机制,最近最久未使用来进行收缩)、异步删除 所以我针对这几个功能讲一下原理: 支持多种对象: G…

Spring Session

Session 共享问题 在 Web 项目开发中,Session 会话管理是一个很重要的部分,用于存储与记录用户的状态或相关的数据。 通常情况下 session 交由容器(tomcat)来负责存储和管理,但是如果项目部署在多台 tomcat 中&#…

某文书网爬虫逆向

一、抓包分析 请求参数和响应数据都有加密 二、逆向分析 老方法、下xhr断点 加密实现逻辑都在这个方法里 执行到这的时候,在向下跟栈数据就已经渲染出来了,说明是在这个方法里进行的解密 解密方法,data.result为加密数据,data.s…

MyBatis 源码解析:Mapper 文件加载与解析

引言 在 MyBatis 中,Mapper 文件扮演了至关重要的角色,它通过 SQL 映射文件来定义数据库查询操作和 Java 对象之间的映射关系。Mapper 文件通常是以 XML 格式存储的,包含了 SQL 语句以及与 Java 对象的对应关系。在本篇文章中,我…