让C#程序在linux环境运行

news/2024/9/25 15:58:29/

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

相关文章

C++的哲学思想

C的哲学思想 文章目录 C的哲学思想💡前言💡C的哲学思想☁️C底层不应该基于任何其他语言(汇编语言除外)☁️只为使用的东西付费(不需要为没有使用到的语言特性付费)☁️以低成本提供高级抽象(更…

前端框架对比与选择指南

在现代 web 开发中,前端框架的选择对项目的成功与开发效率至关重要。本文将对当前流行的前端框架进行深入对比,帮助开发者在 Angular、React 和 Vue.js 中做出明智的选择。更多内容,请查阅 1. 框架概述 1.1 Angular Angular 是由谷歌开发的…

Angular面试题五

一、请解释Angular中的管道是什么,并列举几个内置的管道。 Angular中的管道(Pipe)是一种强大的工具,用于在Angular模板中处理和转换数据,并将其呈现给用户。管道可以将输入数据(如字符串、数字、日期等&…

快速订餐:Spring Boot 点餐系统

第二章关键技术的研究 2.1相关技术 网上点餐系统是在Java MySQL开发环境的基础上开发的。Java是一种服务器端脚本语言,易于学习,实用且面向用户。全球超过35%的Java驱动的互联网站点使用Java。MySQL是一个数据库管理系统,因为它的…

视频汇聚EasyCVR视频监控平台调取接口提示“认证过期”是什么原因?

视频汇聚EasyCVR视频监控平台,作为一款智能视频监控综合管理平台,凭借其强大的视频融合汇聚能力和灵活的视频能力,在各行各业的应用中发挥着越来越重要的作用。EasyCVR平台具备强大的拓展性和灵活性,支持多种视频流的外部分发&…

ubuntu查看全部的磁盘分区命令

要查看所有磁盘和分区,你可以使用以下命令: 使用fdisk命令: sudo fdisk -l这将列出所有磁盘及其分区。 使用lsblk命令: lsblk -f这将显示磁盘和分区的层次结构以及文件系统类型。 使用parted命令: sudo parted -l这个…

掌握Android开发新趋势:Jetpack与现代架构技术全解析

随着Android开发技术的不断进步,Jetpack和现代架构技术已成为构建高效、可维护应用的关键。本文将为您介绍一套全面的学习资料,包括大纲、PDF文档、源代码以及学习视频,帮助您深入理解Jetpack核心库、架构组件以及现代开发工具。 内容&#…

JavaScript函数,数组与对象

1.函数 1.1.函数的声明与调用 声明函数有多种方式,常用的有两种: 第一种方式: function 函数名( ){ //函数体; } 注意: function:定义函数的关键字。函数名后的小括号中写参数。如果函数体中有return语句时&#…