MONO 如何打包 .NET程序独立运作(winform篇)

.NET程序独立运作是指运行.NET的处理器上,不须要安装.NET框架。

.NET程序集“独立运作”并非真正的独门,它是运作在mono运行时基础之上的。由于那个运行时得以单独存在,所以,我们不必要在目的机上安装.NET框架。

图片 1

 

 

如上图:

 

一,嵌入或未嵌入.NET程序集的用C/C++语言写的主程序,这么些主程序负责对mono运行时进行操作。同时还可合营.NET已毕其他的天职(比如提供函数供.NET使用);

 

二,mono的.NET运行时,那是一个动态库文件(mono同时提供了静态库),是.NET程序集运行的严重性条件。

 

三,MONO运行时的陈设文件或文件夹(并不一定要求)。

 

四,外部的程序集并未放置到C程序中的其他的相关.NET程序集。

“独立运转”的经过是:

C语言通过mono提供的运行时api,调用mono运行时有关函数,通过mono运行时加载并运行.NET程序。

 

即:

C语言程序(your.exe)
–à mono的.NET运行时(libmonosgen-2.0.dll) –à .NET程序集

 

libmonosgen-2.0.dll,即是.NET程序集的运行条件,也是.NET程序集与C程序之间数据调换、函数互调的大桥。

好了,有了以上的理论知识,上边大家就从头执行一下啊

 

1.选拔Xbuid命令编译

图片 2

 

2.把编译后的net 运行文件 写入到一个 char[]变量中,并记下那些顺序集的名目,大小

mkpack H:\Csharp\Mono\Test\TestBuild\TestBuild\WindowsFormsApplication1\bin\Debug\WindowsFormsApplication1.exe

会生成3个文件

图片 3

data.c 是.NET程序集的二进制内容

data_.c 是为着文件用户调用的对准data.c的函数和变量

data.h  是data_.c的头文件,是用户c源码必须的。

 

3.将编译data.c编译为对象文件data.o

gcc -c -o data.o data.c

 

4.将编译data_.c编译为对象文件data_.o

gcc -c -o data_.o data_.c -IC:/mono-3.2.3/include/mono-2.0

 

5.将data.o和data_.o 合成为一个纯粹的静态库:data.a

ar rcs data.a data_.o data.o

 

6.编译test.c和连接data.a,生成 test.exe

gcc -o output\test.exe test.c data.a %GCC_OPT% -lmonosgen-2.0

 

末尾的收获如下

图片 4

 

winform 最基本的 lib 有以下多少个,添加到lib\mono\gac目录下。

图片 5

 

运作试试,不成难题

图片 6

 

那就是说最关心的工作来了。

以此文件打包了mono的.net 运行时,size有多大啊?

图片 7

 

调减一下

图片 8

 

相对而言传统的打包.net 运行时 那应当是一个那多少个惬意的品味吗,截止!

 

图片 9

编译后的程序:图片 10

 

 

假使大家觉得有亟待,下篇文章我会写什么的安顿 打包环境。