让C#程序在linux环境运行

今晚花一些时间,总结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.xdnf.cn/news/1541822.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

系统架构笔记-2-计算机系统基础知识

知识要点-2.6计算机语言 UML 对系统架构的定义是系统的组织结构,包括系统分解的组成部分以及它们的关联性、交互机制和指导原则等,提供系统设计的信息。 具体有以下 5 个系统视图: 1. 逻辑视图:也称为设计视图,表示…

【WEB】EZ_Host

1、 2、解答 http://8762a9b0-5aa3-49f8-b8d2-54e4cb0746cc.www.polarctf.com:8090/?hostlocalhost;lshttp://8762a9b0-5aa3-49f8-b8d2-54e4cb0746cc.www.polarctf.com:8090/?hostlocalhost;cat flag即可看到答案

【亿美软通-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

14.面试算法-字符串常见算法题(三)

1. 字符串回文问题 1.1 LeetCode.125. 验证回文串 回文问题在链表中是重点,在字符串中同样是个重点。当初我去美团面试第一轮技术面的第一个算法题就是让写判断字符串回文的问题。 这个本身还是比较简单的,只要先转换成字符数组,然后使用双…

OctoSQL 查询大量数据库和文件格式

OctoSQL 主要是一款 CLI 工具,可让你通过统一界面使用 SQL 查询大量数据库和文件格式,甚至在它们之间进行连接。同时,它还是一个易于扩展的完整数据流引擎,你可以用它为自己的应用程序添加 SQL 接口 OctoSQL是一款功能强大的SQL查…

Git从了解到操作

Git常用命令 基本的linux命令 ls / ll 查看当前目录( ls 是查看目录有哪些文件夹,ll 是查看隐藏文件)cat 查看文件内容touch 创建文件vi vi编辑器 (使用 vi 编辑器是为了方便展示效果,也可以记事本、editPlus、notPad等其它编辑器) 备注 Git GUl: Gi…

docker基本(仅供自己参考)

一、大型项目部署的问题: 1、大型项目的组件比较多,运行环境很复杂,部署通常会遇到各种问题: (1):依赖关系复杂,容易出现兼容性问题 (2):开发、…

雪花算法Snowflake

雪花算法常用于分布式的项目中,是为了解决大数据产生的多表分表中,保证id的唯一性。 1.分布式的特点 全局唯一性:不能出现有重复ID的标识;地增性:确保生成的ID对用于用户或业务是递增的;高可用性&#xf…

施耐德EcoStruxure Machine SCADA Expert(EMSE)与SQL数据库连接(十五)

我习惯使用SQL Server 数据库与EMSE进行连接。 用的是sql 2017 关于数据库软件的安装教程 网上一大把。 1.新建数据库 打开数据库管理工具,新建数据库 2.新建表单 (ps:这里先做一个小测试-----目的是验证与EMSE软件的链接是否顺畅。) 添加两个元素进去…

flask的学习记录

结构如下: app.py from App import create_appapp create_app()if __name__ __main__:app.run(debugTrue,host0.0.0.0,port5000) App/__init__.py from flask import Flask, render_template, request, redirect, url_for from .views import blue from .exts …

VisualPromptGFSS

COCO-20 i ^i i太大,不建议复现

golang学习笔记1-go程序执行流程

声明:本人已有C,C,Python基础,只写本人认为的重点,方便自己回顾。 命令行执行go程序有两种方式,其流程如下图 注意第一种方式会得到可执行文件,第二种不会。 例1 在当前目录下编译hello.go go build hel…

TypeScript入门 (三)数据类型

引言 大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年9月学习赛的TypeScript学习总结文档。本文旨在全面介绍 TypeScript 中的各种数据类型,帮助读者深入理解每种数据类型的用法、内置属性…

Matlab simulink建模与仿真 第十九章(生成C代码)

一、Configuration Parameters模型参数配置 1、仿真时间 (1)在Solver选项卡中可以设置仿真的起始时间和结束时间,一般起始时间设为0,而结束时间按需设置。 (2)如果希望仿真不会自动暂停(也就…

Qwen大型语言模型系列的最新成果 ----Qwen2.5

通义千问2.5-7B-Instruct-GGUF 模型库 (modelscope.cn) apt install git-lfsgit lfs installgit clone https://www.modelscope.cn/qwen/Qwen2.5-7B-Instruct-GGUF.git

(done) 声音信号处理基础知识(3) (一个TODO: modulation 和 timbre 的关联)(强度、响度、音色)

来源:https://www.youtube.com/watch?vJkoysm1fHUw sound power 通常可以被认为是能量传输的速率 声源往所有方向传输的每时间单位能量 用 瓦特(W) 作为单位测量 Sound intensity 声音强度,每单位面积的 sound power W/m^2 人类实际上能听到非常小强…

Mybatis+Druid+MybatisPlus多数据源配置

MybatisDruidMybatisPlus多数据源配置 平常我们使用的是 properties 或者 yaml 来配置数据库的地址、用户名、密码等 但是这样只能配置一个数据源 现在我们想在一个项目里面配置多个数据源,那么我们就需要配置自己的配置类 配置类和配置文件 Mybatismysqldruid配置…

此框架你到底了解多少???

1.简述对Spring中IOC/DI的理解 IOC:控制反转,将创建和管理的对象的任务交给外部的Spring容器 DI:依赖注入,对象之间存在依赖关系,创建对象时,对其依赖的对应直接进行赋值 2.有哪些依赖注入的方式 基于注…

在线教程丨1 步生成 SOTA 级别图像,Hyper-SD 一键启动教程上线!

近年来,扩散模型在文生图任务中得到了广泛的应用,但其在实现高质量图像生成的过程中,通常需要多步推理进行去噪,这显然大大增加了计算资源成本。 针对于此,研究人员引入蒸馏算法,推出了扩撒感知蒸馏算法来…

超实用的 Typora 插件

🌼📚Typora 是一款高效、易用且跨平台的 Markdown 编辑器和阅读器,其具有小巧、快速、实时预览等特点,非常受大家的欢迎。今天给大家推荐一款如虎添翼的 Typora 插件(Typora Plugin),它可以通过插件增强 Typora 的功能…