** 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 CIL 2C 的 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
1<assembly_path> [-check_refs] [-package NAME] [-root ROOTDIR] [-gacdir GACDIR]
2
3安装配件到全局程序缓存中
4
5<assembly_path> 配件所在路径 , 配件钥包含配件清单 (manifast)
6
7例如 : -i myDll.dll
8
9-il <assembly_list_file> [-check_refs] [-package NAME] [-root ROOTDIR] [-gacdir GACDIR]
10
11安装多个配件到全局程序缓存中
12
13<assembly_list_file> 一个文件,包含要增加的配件列表
14
15例如: -il assembly_list.txt
16
17assembly_list.txt 的内容:
18
19assembly1.dll
20
21assembly2.dll
22
23-u <assembly_display_name> [-package NAME] [-root ROOTDIR] [-gacdir GACDIR]
24
25从全局程序缓存中卸载指定配件
26
27<assembly_display_name> 配件名称或者配件的部分名称,如果是部分名称,所有符合这个名称的配件都会被卸载
28
29例如 -u myDll,Version= 1.2.1 .0
30
31-ul <assembly_list_file> [-package NAME] [-root ROOTDIR] [-gacdir GACDIR]
32
33从全局程序缓存中卸载配件
34
35<assembly_list_file> 包含配件列表的文件名
36
37例如 : -ul assembly_list.txt
38
39assembly_list.txt 的内容
40
41assembly1,Version= 1.0.0 .0,Culture=en,PublicKeyToken=0123456789abcdef
42
43assembly2,Version= 2.0.0 .0,Culture=en,PublicKeyToken=0123456789abcdef
44
45-us <assembly_path> [-package NAME] [-root ROOTDIR] [-gacdir GACDIR]
46
47从全局程序缓存中卸载配件
48
49<assembly path=""> 配件所在路径
50
51Example: -us myDll.dll
52
53-l [assembly_name] [-root ROOTDIR] [-gacdir GACDIR]
54
55列出全局程序缓存中所有的配件
56
57如果指定 <assembly_name> 参数,将只显示符合参数的配件
58
59-?
60
61显示帮助信息
62
63参数如下:
64
65-package <name>
66
67用来在 prefix/lib/mono 目录下增加一个名为 NAME 的目录 , 然后增加一个从 NAME/assembly_name 到全局程序缓存中的配件的一个链接
68
69-gacdir <gacdir>
70
71指定全局程序缓存的目录,如果不是标准的全局程序缓存目录,将使用 MONO_GAC_PATH 环境变量来引用配件。
72
73-root <rootdir>
74
75用来集成 automake 工具
76
77-check_refs
78
79检查将要导入的配件不被任何未强命名的配件引用
80
81-f
82
83Mono gacut 不考虑兼容性, gacutil</rootdir></gacdir></name></assembly_name></assembly></assembly_path></assembly_list_file></assembly_list_file></assembly_display_name></assembly_display_name></assembly_list_file></assembly_list_file></assembly_path></assembly_path>