1、使用csc命令操作。
2、所有面向clr的編譯器最終生成的就是乙個託管模組。託管模組是乙個32位/64位的可執行執行體檔案(pe32、pe32+檔案),需要clr才能執行。
託管模組由4部分組成:
第一部分:pe32/pe32+頭。1、檔案格式。其本身的檔案格式決定了其是否可以在64位機器上執行。另外,該頭還包括了gui、cui或dll檔案,及檔案的生成時間等資訊。另外,本部分還包括了本地的cpu的相關資訊。
第三部分:元資料。用於儲存程式資訊。一是本程式(本源**)中的定義的變數和方法等;另一儲存本**中引用的型別和成員。
第四部分:il**。中間語言,不像c語言編譯器,直接將c程式編譯為cpu命令,c#等面向clr的編譯器先把程式變異為il語言,clr再將il語言編譯為cpu命令
3、用csc檔案生成託管模組。用例子說明
具體**如下:
cat類:
using system;
namespace animal}}
dog類:
using system;
namespace animal}}
program類
using system;
using animal;
public class program
}
其輸出結果將是:汪汪
其會在d:\mycode資料夾下生成兩個.netmodule檔案。這個就是託管模組。生成的如下:
通過csc命令,將netmodule檔案生成animal.dll,如圖所示:
此時,程式集應該是:animal.dll+cat.netmodule+dog.netmodule。三者才是程式集。可以這樣理解,animal.dll是乙個目錄,當程式用到netmodule檔案時,程式會到animal.dll中去尋找,類似linq或資料庫的延遲載入,等到用到時才執行,這樣節省了頻寬,降低了網路要求。
通過ide生成的dll則不會出現netmodule檔案,dll包含了cat.netmodule+dog.netmodule,使得誤以為dll就是程式集。
此時資料夾裡的內容如下圖所示:
將引用dll及module生成exe
此時會在資料夾中全部的內容如下:
通過執行,得到理論結果。
4 其他
4.1生成方式
ide通過根據原始檔,直接生成dll,即dll中包含了module檔案。
這樣就可以型別ide生成的dll,避免了生成託管模組。可以直接在程式中使用。
參考文章:
CLR 讀書筆記
clr 讀書筆記 明確幾個問題 1 net framework 如何設計的,相較與com有何重大變化 2 net 語言如何變為il,il 如何儲存,clr怎樣處理它,以及怎樣處理託關與非託管 之間的聯絡 3 為什麼要為assembly配置meta data,clr 怎樣使用它,meta data 怎...
CLR讀書筆記 第一章 CLR的執行模型
參考了jianqiang bao的筆記 1.1 將源 編譯成託管模組 1.生成什麼型別的應用程式或者組建 檔案 1 clr common language runtime 公共語言執行時 可由多種語言使用的執行時 就是乙個執行時環境 什麼是clr.參考 在clr監視下執行的程式屬於 託管的 不在cl...
mysql運維 讀書筆記 Mysql 讀書筆記
mysql儲存時間有兩種型別 datetime和timestamp。分別說一下兩者的區別。datetime,以8位元組儲存時間,理論上可以從0000年儲存到9999年。並且沒有時區的概念,它儲存的就是乙個時間點的概念。timestamp和datetime最主要的不同就是,它是以4個位元組儲存,由19...