分享
 
 
 

Hello Mono

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

3

Hello Mono

本章内容

ü Mono命令

ü Hello Mono

ü Mono的开发工具

ü Mono中文问题

3.1 Mono命令

正确安装Mono之后,就可以使用mono的C#编译器mcs编译cs文件了。Mono一般有以下的工具:

mono:mono 的JIT编译器,运行mono程序

mcs:c#编译器

gmcs:符合C#2.0规范的编译器,正在实现中

mbas:basic编译器

MonoDevelop:Mono IDE开发工具

monodoc:帮助文件查看工具

mint:Mono解释器(Interpreter),以解释的形式运行mono程序

ilasm:Mono汇编程序

monodis:Mono反汇编器

al:程序集链接器

cert2spc:发行者证书测试工具

certmgr:证书管理器工具管理证书、证书信任列表和证书吊销列表

chktrust:证书验证工具检查用 Authenticode 证书签名的文件的有效性

cilc:Mono CIL2C的binding产生器,可以为配件产生c的接口

disco:Web 服务发现工具

gacutil:全局程序集缓存工具可以查看和操作全局程序集缓存

genxs:Mono XML序列化产生器

makecert:证书创建工具

monograph:显示配件的调用关系和类型层次结构

monop:Mono 类大纲查看器

monoresgen:Mono资源产生器

resgen:IL资源产生工具

secutil:从程序集提取 X.509 证书的强名称信息或公钥

setreg:设置注册表工具使您得以更改公钥密码的注册表设置

signcode:文件签名工具使用

sn:强名称工具有助于使用强名称对程序集进行签名

soapsuds:编译使用Remote与 XML Web services 通信的客户端应用程序

sqlsharp:sql命令行交互式工具

wsdl:Web 服务描述语言工具

xsd:XML 架构定义工具

最常用的是mcs、mono和gacutil。

mcs的语法

mcs [参数] 源文件

参数可以使用-option或者/option的方式。

参数:

--about 显示c#编译器的信息

-checked[+][-]指定溢出数据类型边界的整数算法是否将在运行时导致异常。

-codepage:ID指定编译中的所有源代码文件所使用的代码页

-clscheck[+][-] 禁止编译器依附关系检查

-define:S1[;S2] 定义一个或多个符号,可以简写为/d

-debug[+][-] 产生调试信息

-delaysign[+][-] 仅仅将公钥插入到配件中,并不进行签名

-doc:File 产生XML文档,利用ndoc工具可以产生类似MSDN的文档

-g 产生调试信息

-keycontainer:NAME 指定用来强命名(strongname)配件的密钥对

-keyfile:FILE 指定用来强命名的密钥文件

-lib:PATH1,PATH2 增加配件链接的路径

-main:class 指定入口点(entry point),也就是缺省可执行的那个类

-noconfig[+][-] 不使用默认的参考编译,和微软的csc的/noconfig对应

-nostdlib[+][-] 不导入标准库

-nowarn:W1[,W2] 显示一个或者多个警告信息

-out:FNAME 指定输出文件名

-pkg:P1[;P2] 引用包P1…P2

--expect-error X 期望抛出X异常

-resurce:SPEC搜索指定目录中要编译的源文件

-reference:ASS 编译时引用ASS配件

-target:KIND 编译输出类型,可以是exe、winexe、liberary和module

-unsafe[+][-] 编译使用 unsafe 关键字的代码

-warnaserror[+][-] 将警告作为错误对待

-warn:LEVEL 警告等级,最高是4,缺省是2

-help2 获得更多帮助信息

-linkresource:FILE[,ID] 链接一个资源文件

-resource:FILE[,ID] 嵌入一个资源文件

-win32res:FILE 链接一个win32资源文件

-win32icon:FILE 指定图标

@FILE指定响应文件,文件列出了编译器选项或要编译的源代码文件的文件

mono的语法

mono [参数] 配件

参数如下:

--compile METHOD 只编译配件中指定的方法

--ncompile N 编译此方法的次数,缺省是1

--regression 运行纠正测试

--print vtable 输出所有用到的类的vtable

--trace[=EXPR] 允许跟踪

--compile-all 编译配件中所有的方法

--breakonex 在异常上插入一个断点

--break METHOD 在方法的入口上插入一个断点

--debug 允许调试

--stats 输出JIT操作的统计信息

--statfile FILE 设置统计文件

--aot 将配件编译成本地程序

--profile[=profiler] 指定profiler

--graph[=TYPE] METHOD 画一图形(cfg、dtree、code、ssa、optcode)

--config FILE 指定Mono的配置文件

--verbose显示更详细消息

--help 帮助信息

--version 显示版本信息

--optimize=OPT 性能优化

gacutil的用法

gacutil [命令] [参数]

命令如下:

-i <assembly_path> [-check_refs] [-package NAME] [-root ROOTDIR] [-gacdir GACDIR]

安装配件到全局程序缓存中

<assembly_path> 配件所在路径,配件钥包含配件清单(manifast)

例如: -i myDll.dll

-il <assembly_list_file> [-check_refs] [-package NAME] [-root ROOTDIR] [-gacdir GACDIR]

安装多个配件到全局程序缓存中

<assembly_list_file> 一个文件,包含要增加的配件列表

例如:-il assembly_list.txt

assembly_list.txt 的内容:

assembly1.dll

assembly2.dll

-u <assembly_display_name> [-package NAME] [-root ROOTDIR] [-gacdir GACDIR]

从全局程序缓存中卸载指定配件

<assembly_display_name> 配件名称或者配件的部分名称,如果是部分名称,所有符合这个名称的配件都会被卸载

例如 -u myDll,Version=1.2.1.0

-ul <assembly_list_file> [-package NAME] [-root ROOTDIR] [-gacdir GACDIR]

从全局程序缓存中卸载配件

<assembly_list_file>包含配件列表的文件名

例如: -ul assembly_list.txt

assembly_list.txt的内容

assembly1,Version=1.0.0.0,Culture=en,PublicKeyToken=0123456789abcdef

assembly2,Version=2.0.0.0,Culture=en,PublicKeyToken=0123456789abcdef

-us <assembly_path> [-package NAME] [-root ROOTDIR] [-gacdir GACDIR]

从全局程序缓存中卸载配件

<assembly path>配件所在路径

Example: -us myDll.dll

-l [assembly_name] [-root ROOTDIR] [-gacdir GACDIR]

列出全局程序缓存中所有的配件

如果指定 <assembly_name>参数,将只显示符合参数的配件

-?

显示帮助信息

参数如下:

-package <NAME>

用来在 prefix/lib/mono 目录下增加一个名为NAME的目录,然后增加一个从 NAME/assembly_name 到全局程序缓存中的配件的一个链接

-gacdir <GACDIR>

指定全局程序缓存的目录,如果不是标准的全局程序缓存目录,将使用MONO_GAC_PATH环境变量来引用配件。

-root <ROOTDIR>

用来集成automake工具

-check_refs

检查将要导入的配件不被任何未强命名的配件引用

-f

Mono gacut不考虑兼容性,gacutil总强行安装新配件

-r <reference_scheme> <reference_id> <description>

Mono gacutil 并没有实现跟踪引用,当这个参数使用时,或发出一个警告信息

其它工具基本可以使用 –help参数来了解其使用方法。

3.2 Hello Mono

做了这么多准备工作,现在是进入我们的HelloMono的时候了。利用文本编辑工具输入下面的代码,保存为HelloMono.cs文件。

using System;

namespace Kuaff.MonoGuide.Ch2

{

public class HelloMono

{

public static void Main(string[] args)

{

Console.WriteLine(“Hello Mono!”);

}

}

}

在终端中进入文件所在目录,输入mcs HelloMono.cs,则编译生成HelloMono.exe文件。

在终端中输入mono helloMono.exe,则会看到“Hello Mono!”出现。

3.3 Mono开发工具

在Windows下,你可以采用开源的#develop IDE开发工具编写Mono程序。在Linux操作系统上,你可以使用MonoDevelop、eclipse进行开发。当然,你也可以使用一般的文本编辑工具如Emacs、KWrite、Kedit和Kate等编写csharp文件,然后利用mcs工具进行编辑。

MonoDevelop

在终端中输入MonoDevelop。

图3.3.1 MonoDevelop启动画面

目前这个MonoDevelop功能还不能说是强大,但是相对来说,对编写c#程序很有帮助。

Ø 随Mono发布的一款IDE工具

Ø 以工程的方式组织C#文件

Ø 插件式设计,随着大家对这款开发工具的熟悉,越来越多的插件会发布出来,它的功能也会越来越强大

Ø 多模板设计,可以开发控制台程序、C#类库、GTK#、GNOME#、Glade#、ILasm、java、WebServices、MonoDevelop插件等程序

Ø 集成帮助信息

Ø 语法加亮、代码自动提示

……

当然,目前MonoDevelop还有很多功能还不完善,如没有界面设计工具(没办法、Windows.Form还没实现)、首选项还很简单、没有集成NAnt、NUnit等工具。

图3.3.2 MonoDevelop开发工具

后面的章节的例子都是在MonoDevelop上开发的。

菜单:

File菜单

New File:新建一个文件,这里按照解决方案的不同进行了分类。

C#:支持Session的WebServices、 C# WebServices、空C#文件、

Gnome#程序、Gtk#Window

Java:空java文件、AWT小应用程序、AWT程序、AWT对话框、

AWT Frame、AWT OK对话框、AWT面板

Misc:空白HTML文件、空白资源文件、空白文本文件、空白XML

文件

MonoDevelop:简单MonoDevelop菜单命令、MonoDevelop Pad、

简单MonoDevelop视图、简单MonoDevelop命令

Nemerle:空白Nemerle文件

New Solution/Project:新建一个解决方案、工程。按照工程不同页进行了分类。

C#:控制台工程、空的工程、Glade#工程、Gnome#工程、

Gtk#工程、C#类库

ILAsm:ILAsm控制台工程

Java:空的java工程、IKVM控制台工程、IKVM Gtk#工程、

java控制台工程

MonoDevelop:一个空的工程

Nemerle:一个空的Nemerle工程

Open:打开文件

Close File:关闭文件

Close Solution:关闭解决方案、工程

Save:保存

Save as:保存为

Save All:保存所有

Import VS Project:从Visula Studio.net工程导入

Recent Files:最新打开的文件

Recent Solutions:最新打开的工程

Quit:退出

Edit菜单

Undo:撤销

Redo:恢复刚才操作

Cut:剪切

Copy:复制

Paste:粘贴

Delete:删除

Select All:选择全部

Word Count:字数统计

Preference:首选项,可以定制自己的偏爱

View菜单

Solution:显示解决方案视图

Classes:显示类视图

Files:显示文件视图

Task List:显示任务列表视图

Help:显示帮助视图

Output:显示输出视图

Layout:布局,可以将目前的视图设置保存为一种布局

Full Screen:全屏显示MonoDevelop

Run菜单

Compile:编译

Compile All:编译全部

Run:运行,

Search菜单

Find:查找

Find Next:查找下一个

Replace:替换

Find In Files:多文件查找

Replace In Files:多文件替换

Toggle Bookmark:增加书签

Previous Bookmark:前一个书签

Next Bookmark:后一个书签

Clear Bookmark:清除书签

Goto Line:转到行

Goto Matching Brace:转到对应的括号

Window菜单

Next Window:下一个窗口

Previous Window:前一个窗口

Close All:关闭所有窗口

Help菜单

Tip of the Day:每日提示

Web:查看联机文档

About:开发者以及版权信息

以下是对菜单对应的工具栏

增加引用的部件

在我们使用visual studio.net的时候,当我们需要引用第三方的配件的时候,需要将其加入到引用中,在MonoDevelop也要这样做,这样在编译程序的时候,就告诉了mcs需要使用-r参数将引用包含进来,否则编译的时候会出错。

在你的C#工程的解决方案视图中,选择Reference,点击右键,选择Edit Reference,会弹出对话框。

在弹出对话框中有三个标签卡(Tab),分别显示全局程序缓存中的配件、工程已经引用的配件以及其他配件。

在全局程序缓存中,列出当GAC中所有的配件,你可以根据需要选、删所需的配件,在Project标签卡上,显示出当前的引用,你可以在这里删除不需要的引用。在第三个标签卡中,你可以选择第三方的配件,如SharpZipLib.dll等,这些配件不一定加入到全局程序缓存中。

Eclipse

Eclipse是IBM捐献出的一款极棒的开发工具,我主要使用它开发java程序。它的插件机制使它不仅仅成为一款和JBuilder相媲美的工具,许多公司和开发还在其上开发了大量的插件,可以用它来设计UML、其他开发语言,现在推出的富客户端技术将使它成为工具的载体,你可以在上面开发类似photoshop一样的工具。它的C#插件可以用来编辑C#文件,这是improve发布的插件。

如果要运行,你需要安装JDK,可以到http://java.sun.com区下载一个JDK1.4.2的安装包,有针对各平台的版本。到http://www.eclipse.org下载Eclipse 3.0或者3.1的版本,按照说明安装。

图3.3.3 Eclipse开发工具

读者不要期望C#插件能有java插件那么强大的功能。这个C#插件并不是Eclipse的官方插件,使用起来不尽人意,在介绍的过程中会提到,但是C#插件本可以做的和java插件一样好。将C#插件安装到Eclipse的插件目录。

启动Eclipse,在菜单中选择新建一个工程,会显示工程向导。这里有java工程的向导、插件开发向导等,本可以做一个C#的向导,进入C#的透视图,但是这个插件没有提供这个功能。所以我们选择简单工程(Simple->Project)。

图3.3.4 新建工程

选择下一步,输入项目名称和项目的保存目录。

图3.3.5 保存项目

完成后Eclipse将显示资源透视图。新建一个C#文件。在菜单中选择

File->New->Other,启动向导,选择C#->C#文件。

图3.3.6 新建一个C#文件

输入文件名HelloEclipse.cs,保存文件。在编辑器中可以修改生成的C#文件。HelloEclipse.cs文件的代码如下:

using System;

namespace Kuaff.MonoGuide.Ch3 {

Class HelloEclipse {

Public static void Main() {

Console.WriteLine(“Hello Eclipse!”);

}

}

}

如果要编译这个文件,还需在首选项里设置Mono编译器mcs的文件,打开首先项:

图3.3.6 设置mcs编译器

一旦设置,修改完毕C#文件,保存的时候自动编译此文件。这时在工程目录下生成了HelloEclipse.exe文件。

打开终端,进入工程所在目录,执行mono HelloEclipse.exe,将会输出“Hello Eclipse!”。

图3.3.7 执行HelloEclipse.exe程序

在这个c#插件中无法引用其他的配件。修改一下我们前面的代码:

using System;

using Gtk;

namespace Kuaff.MonoGuide.Ch3 {

Class HelloEclipse {

Public static void Main() {

Console.WriteLine(“Hello Eclipse!”);

}

}

}

简单增加一个对Gtk配件的引用,编译的时候就会出错。这是因为这个插件在编译的时候没有增加对gtk#配件的引用。

我们期待有更好更多的工具出现。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有