.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 運作時 這應該是一個非常滿意的嘗試吧,結束!
編譯後的程式:
如果大家覺得有需要,下篇文章我會寫如何的配置 打包環境。
如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕,您的“推薦”将是我最大的寫作動力!歡迎各位轉載,轉載文章之後須在文章頁面明顯位置給出作者和原文連接配接,謝謝。