在Linux上运行C#

转载 2007年10月11日 17:57:00
来源:飞天羽鸿博客
  众所周知,C#是Microsoft推出的.NET语言,只能在.NET平台上运行,例如Win 9x、ME、NT、2000、XP和Win CE之类的操作系统。但是,现在却有了一个叫做Mono的项目,它的目标就是把.NET及其编程语言移植到非Windows的平台上。现在,C#是唯一被移植到非Windows平台的.NET语言。

  在任何一个平台(操作系统+硬件体系)上,编写和运行程序的三个最根本的需求是库、编译器/解释器、运行环境。库以类和方法(函数)的形式提供常用的例程,简化大型程序的编写。.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的友好程度等。 

Linux下C# 开发环境搭建

Linux下C# 开发环境搭建
  • jtahstu
  • jtahstu
  • 2015-08-21 21:57:28
  • 8620

Linux下开发C#程序

1. 安装MonoDevelop环境。    OS:Ububtu16.04   打开Software,选择Development Tools。 然后选择MonoDevelop,选...
  • md521
  • md521
  • 2016-05-18 13:45:01
  • 3908

Mono使用C#执行shell脚本(Linux)

执行代码 Process process = new Process(); process.StartInfo.FileName = "bash"; ...
  • fwj380891124
  • fwj380891124
  • 2016-11-26 14:28:21
  • 1746

Linux上运行C#

  • 2006年02月23日 09:05
  • 136KB
  • 下载

C# 程序如何操作linux服务器上的文件

刚开始思考这个问题的时候,完全没有头绪,不知道怎么跨越系统的屏障来操作linux服务器上的文件,还好大神很多,度娘了一下,发现其实跟系统没关系,只要是想操作文件,FTP,HTTP等都可以。 下面把简...
  • jly_ang
  • jly_ang
  • 2017-03-31 14:10:13
  • 998

linux与C#服务器的通信(测试成功)

采集端程序运行的有错误的,因为我把好多部分的代码去掉了,但是大体框架还在,各位稍微动动脑子就可以实现了。祝各位成功!...
  • u010786215
  • u010786215
  • 2016-10-19 16:00:46
  • 778

C#与linux 时间戳互转

在unix/linux或者mysql中都有类似时间戳,这个时间是从1970-1-1零点零分零秒的时间后经过的秒数。 public static DateTime UnixTimeStampToDat...
  • zcg1041
  • zcg1041
  • 2016-03-09 15:56:49
  • 1209

【Mono】C# + Mono + Linux 编程初体验之 HelloWorld

理解Mono,可以类比 Java虚拟机。Java虚拟机(该虚拟机最初只为Java打造所以才叫Java虚拟机,跟Java语言应该分开看)就是一个语言虚拟机,它也有自己的一套规范,只要遵循Java虚拟机规...
  • xiaohui_hubei
  • xiaohui_hubei
  • 2013-10-12 23:07:53
  • 18402

c#远程控制linux

  • 2015年08月19日 11:14
  • 154KB
  • 下载

C# winform实现与linux socket通信

windows 主机下winform Form1.cs代码://Form1.cs using System; using System.Collections.Generic; using Syste...
  • xiangxianghehe
  • xiangxianghehe
  • 2017-07-13 13:36:18
  • 815
收藏助手
不良信息举报
您举报文章:在Linux上运行C#
举报原因:
原因补充:

(最多只允许输入30个字)