在Linux上运行C#的方法
作者:shichen2014 发布时间:2023-03-06 00:28:39
本文实例讲述了在Linux上运行C#的方法。分享给大家供大家参考。具体方法如下:
在任何一个平台(操作系统+硬件体系)上,编写和运行程序的三个最根本的需求是库、编译器/解释器、运行环境。库以类和方法(函数)的形式提供常用的例程,简化大型程序的编写。.NET框架也不例外,包含了许多类库。另外,把程序转换成可执行形式以及运行执行文件时,编译器和运行环境是必不可少的。Mono软件包包含了.NET类库的一部分、一个C#编译器和.NET运行环境CLR(Common Language Runtime,公共语言运行时环境)。
Mono声称支持Linux、Solaris、Free BSD和MS Windows;除了Intel x86系列的CPU(486,各类Pentium等)之外,据说还要支持Sparc、PowerPC和StrongArm处理器。
下面就来看看如何在Linux上运行Mono。
命令行应用
先从Mono主页(http://www.go-mono.com/)下载软件,执行下面的命令安装所有RPM:
rpm -ivh *.rpm
安装完成后,所有基本的动态执行库,包括System.Data.dll、System.dll、System.Drawing.dll、System.Web.dll和System.Xml.dll都被复制到/usr/lib下。接下来,在Linux文本编辑器中输入下面的内容,把文件保存为HelloMono.cs:
class HelloMono
{
public static void Main(string[ ] args)
{ System.Console.WriteLine("Hello Mono");
}
}
执行下面的命令编译C#文件:
mcs HelloMono.cs
mcs是Mono的C#命令行编译器。与MS .NET SDK的csc编译器相似,mcs也有很多命令行选项。上面的命令将生成可执行文件HelloMono.exe。注意这个执行文件不是Linux执行文件,而是一个.NET执行文件,或者说,这个文件的可执行代码形式是中间语言(IL,Intermediate Language)。要运行这个执行文件,必须执行如下命令:
mono HelloMono.exe
Linux控制台上将显示出"Hello Mono"。关于mcs和Mono的更多说明,请执行man mcs或man mono参考其man文档。
GUI应用
Mono不支持Windows Forms,但在C#编程中可用GTK #编写GUI。GTK #是GTK+图形库的C#支持工具,可从http://gtk-sharp.sourceforge.Net/下载。下载完成后,先要安装RPM:
rpm -Uvh *.rpm --nodeps
解开gtk-sharp-0.2.1.tar.gz:
tar -zxvf gtk-sharp-0.2.1.tar.gz
进入子目录gtk-sharp-0.2.1,执行:
./configure --prefix=/usr
make
make install
完成这一步骤之后,重新启动一次。与GTK#有关的所有动态代码模块(gtk-sharp.dll、atk-sharp.dll、gdk-sharp.dll、glib-sharp.dll以及pango-sharp.dll)都会被复制到/usr/lib目录,编译用GTK#制作GUI的C#程序时,必须通过-r参数引用它们。GTK#下载包中包含了几个示例程序,如HelloWorld.cs、Menu.cs、ButtonApp.cs等。编译这些文件的命令如下:
mcs -r gtk-sharp -r glib-sharp HelloWorld.cs
mcs -r gtk-sharp -r glib-sharp -r System.Drawing Menu.cs
mcs -r gtk-sharp -r glib-sharp -r System.Drawing ButtonApp.cs
下面来看看如何通过-r选项引用前面各个.dll动态模块。执行startx命令启动X Window,进入终端窗口,再进入示例程序所在目录,执行下面的命令分别运行各个程序:
mono HelloWorld.exe
mono Menu.exe
mono ButtonApp.exe
Mono项目还在完善和发展之中,还没有移植好全部.NET类。但不管怎样,它对许多人来说将是一个好消息。有关Mono C#类库移植进展的信息,感兴趣的朋友可以访问www.go-mono.com/class-status.html。
考虑一个典型的服务器/客户机式.NET应用:最终用户只与客户端打交道,客户端最好是方便的GUI应用,许多人还会希望使用熟悉的Windows平台。但是,对于他们来说,服务器端使用Windows还是Linux完全无关。所以,服务器端可以用带有Mono的Linux构造,节省了配备专用Windows服务器的投资。Mono也将为应用迁移带来方便。如果Mono能够顺利发展,Windows开发者也将能够为Linux或其他非Windows平台开发应用。如果这样的话,不久之后出现一个类似Visual Studio .NET但免费或廉价的Linux开发IDE也说不定。
然而,所有这一切是否能够成为现实,依赖于Mono是否能够茁壮发展,也依赖于Mono与Windows平台上的.NET框架兼容或相似程度。另外一些因素也很关键,例如Mono的性能、GUI的友好程度等。
希望本文所述对大家的C#程序设计有所帮助。


猜你喜欢
- 本文实例为大家分享了unity实现场景切换进度条显示的具体代码,供大家参考,具体内容如下一、UI。建立slider适当更改即可;二、新增lo
- Java BorderLayout布局管理器的两种排列java中Frame类默认的布局管理器为BorderLayout,其主要是将Frame
- Result可以设定全局结果集,如:<struts> <constant name="struts
- Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能Jenkins是基于Java开发的一种持续集成工具
- 本文实例讲述了java Swing组件setBounds()简单用法。分享给大家供大家参考,具体如下:先看API:public void s
- 一、问题来源项目中遇到 json 模型映射成 RadialGradient 组件的需求,其他参数正常传递即可;唯独 radius 参数效果有
- import java.io.BufferedReader;import java.io.IOException;import java.i
- 一、基本概念:线程、进程1.1、进程与线程的具体介绍线程(thread),进程可进一步细化为线程,是一个程序内部的一条执行路径。若一个进程同
- 什么是线程同步? 当使用多个线程来访问同一个数据时,非常容易出现线程安全问题(比如多个线程都在操作同一数据导致数据不一致),所以我们用同步机
- 前言定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类在简单工厂模式中用于被创建实例的方法通常为静态(s
- 目录项目地址示例图片项目结构机器人平滑碰撞其它特性使用打包文件项目文件声明主要代码项目地址https://github.com/SCNU-A
- Android AsyncTask详解及使用方法 简介: AsyncTask就是一个封装过的后
- 一个Java程序的执行要经过编译和执行(解释)这两个步骤,同时Java又是面向对象的编程语言。当子类和父类存在同一个方法,子类重写了父类的方
- 本文实例为大家分享了Java实现简易俄罗斯方块的具体代码,供大家参考,具体内容如下一、将对象抽象为类首先考虑俄罗斯方块游戏中含有哪些具体的对
- 重载:方法名相同,但参数不同的多个同名函数注意:1.参数不同的意思是参数类型、参数个数、参数顺序至少有一个不同2.返回值和异常以及访问修饰符
- 定时任务,是指定一个未来的时间范围执行一定任务的功能。在当前WEB应用中,多数应用都具备任务调度功能,针对不同的语音,不同的操作系统, 都有
- 1、检测权限因为dump系统lsass内存和sam注册表需要管理员权限,所以首先需要对当前进程上下文权限做判断。public static
- 前言日志模块是每个项目中必须的,用来记录程序运行中的相关信息。一般在开发环境下使用DEBUG级别的日志输出,为了方便查看问题,而在线上一般都
- 本文实例为大家分享了C#点餐系统的具体代码,供大家参考,具体内容如下using System;using System.Collection
- 前言博主上个礼拜,已经实现了quarkus的native image应用的上线,经过两天的监控下来,一切运行指标良好,就是内存升到了100M