在Linux上运行C#的方法

 更新时间:2014年12月09日 09:58:40   投稿:shichen2014  
这篇文章主要介绍了在Linux上运行C#的方法,实例分析了Linux平台下Mono软件包的应用技巧,以及在此基础之上的C#运行方法,具有一定的参考借鉴价值,需要的朋友可以参考下

本文实例讲述了在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#程序设计有所帮助。

相关文章

  • C#独立域名查询代码

    C#独立域名查询代码

    C#独立域名查询代码...
    2007-04-04
  • C# WinForm程序处理后台繁忙导致前台控件假死现象解决方法

    C# WinForm程序处理后台繁忙导致前台控件假死现象解决方法

    这篇文章主要介绍了C# WinForm程序处理后台繁忙导致前台控件假死现象解决方法,本文通过Application.DoEvents()解决这个问题,并讲解了Application.DoEvents()的作用,需要的朋友可以参考下
    2015-06-06
  • 使用Nopcommerce为商城添加满XX减XX优惠券功能

    使用Nopcommerce为商城添加满XX减XX优惠券功能

    中秋国庆节眼看到跟前了,很多商城都借此机会搞促销活动,什么满200减80送优惠券等活动,基于后台程序是怎么实现的呢?下面脚本之家小编带领大家一起学习吧
    2015-09-09
  • C#下使用XmlDocument操作XML详解

    C#下使用XmlDocument操作XML详解

    本文详细讲解了C#使用XmlDocument操作XML的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • C# try catch代码块不起效果的解决方法

    C# try catch代码块不起效果的解决方法

    本文主要介绍了C# try catch代码块不起效果的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • C#中Backgroundworker与Thread的区别

    C#中Backgroundworker与Thread的区别

    本文主要介绍了C#中Backgroundworker与Thread的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • C#实现汉字转拼音(多音字)功能详解

    C#实现汉字转拼音(多音字)功能详解

    这篇文章主要为大家详细介绍了如何利用C#实现汉字转拼音(支持多音字)的功能,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-02-02
  • c# 区分几种定时器(timer)

    c# 区分几种定时器(timer)

    这篇文章主要介绍了c# 几种定时器(timer)的区别,文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • C#实现右键快捷菜单(上下文菜单)的两种方式

    C#实现右键快捷菜单(上下文菜单)的两种方式

    在C#中,ContextMenuStrip是一种用于创建右键菜单的控件,它提供了一种方便的方式来为特定的控件或窗体添加自定义的上下文菜单选项,有两种实现方式,文中介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • C#如何获取枚举的描述属性详解

    C#如何获取枚举的描述属性详解

    这篇文章主要给大家介绍了关于C#如何获取枚举的描述属性的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-02-02

最新评论