1. 程式人生 > >MONO 如何打包 .NET程式獨立執行(winform篇)

MONO 如何打包 .NET程式獨立執行(winform篇)

.NET程式獨立執行是指執行.NET的電腦上,不需要安裝.NET框架。

.NET程式集“獨立執行”並非真正的獨立,它是執行在mono執行時基礎之上的。由於這個執行時可以獨立存在,所以,我們不需要在目標機上安裝.NET框架。

如上圖:

一,嵌入或未嵌入.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.把編譯後的net 執行檔案 寫入到一個
char[]變數中,並記下這個程式集的名稱,大小 mkpack H:\Csharp\Mono\Test\TestBuild\TestBuild\WindowsFormsApplication1\bin\Debug\WindowsFormsApplication1.exe 會生成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 最後的成果如下 winform 最基本的 lib 有以下幾個,新增到lib\mono\gac目錄下。 執行試試,沒有問題 那麼最關心的事情來了。 這個檔案打包了mono的.net 執行時,size有多大呢? 壓縮一下 相比傳統的打包.net 執行時 這應該是一個非常滿意的嘗試吧,結束! output.rar

編譯後的程式:

如果大家覺得有需要,下篇文章我會寫如何的配置 打包環境。