本文的目的是使用mono构造一个最小的.net运行环境。
构造一个最小.net环境的好处何在?
第一,可以在没有.net运行库的机器上发布.net程序。
第二,研究最小.net环境,可以将.net用于一些嵌入式操作系统。提高开发效率。
尝试的过程,就不描述了。直接发布结果。
1.最基本的文件依赖
bin\mono.exe
bin\mono-20.dll
lib\mono\2.0\mscorlib.dll
这三个文件是最基本的。只要有这三个文件,就可以运行控制台下的helloWorld。
可以访问基本的IO。
2.网络程序的依赖
lib\mono\gac\System\2.0.0.0__b77a5c561934e089\System.dll
lib\mono\gac\System.Configuration\2.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll
lib\mono\gac\System.Xml\2.0.0.0__b77a5c561934e089\System.Xml.dll
有这三个文件再加上基本的依赖(共6个文件),就可以使用TcpClient和Socket类。
3.Winform程序的基本依赖
lib\mono\gac\System\2.0.0.0__b77a5c561934e089\System.dll
lib\mono\gac\Mono.Posix\2.0.0.0__0738eb9f132ed756\Mono.Posix.dll
lib\mono\gac\Accessibility\2.0.0.0__b03f5f7f11d50a3a\Accessibility.dll
lib\mono\gac\System.Windows.Forms\2.0.0.0__b77a5c561934e089\System.Windows.Forms.dll
lib\mono\gac\System.Drawing\2.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll
有这五个文件,加上基本的的三个文件,就可以运行基本的Winform程序
如果使用了其他的类,少什么文件就加什么文件就行了。
只要找到上面的文件列表中的文件,在保持原有的目录结构的前提下,把发布的目录拷贝,然后在bin目录下执行mono appname.exe就可以运行程序了。
类似2.0.0.0__b77a5c561934e089这样的目录,实际上是这个dll的版本号。这个与mono的版本有关。在不同的版本中不一样。但是前面的目录是一样的。比如System的目录下,一定有System.dll文件,可能不止一个,我们只需要2.0.0.0开头的目录下的文件。
Linux:
1.基本
usr/bin/mono.exe
usr/lib/mono/2.0/mscorlib.dll
这两个文件就可以搞定helloworld.
2.网络(与windows上相同)
usr/lib/mono/gac/System/2.0.0.0__b77a5c561934e089/System.dll
usr/lib/mono/gac/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
usr/lib/mono/gac/System.Xml\2.0.0.0__b77a5c561934e089/System.Xml.dll
3.winform(尚未成功,有一个文件还没有搞定)