在.NET組件和模塊之間的區別在於,一個模塊 不包含清單。
//Copied from CLR via C#
什麼是體現?
清單是另一組 元數據表,它們基本上包含作爲程序集一部分的文件的名稱。他們也 描述大會的版本,文化,出版社,公開導出的類型,以及所有組成的文件。
CLR在組件上運行;即CLR始終首先加載包含清單 元數據表的文件,然後使用清單獲取程序集中其他文件/模塊的名稱。
如何將模塊組合成組件?
使用C#編譯器
要了解如何構建一個多文件/多模塊 裝配,讓我們假設我們有兩個源代碼文件:
■■RUT.cs,其中含有很少使用類型
■■FUT.cs,其中包含常用的類型
讓我們編譯很少使用類型int o他們自己的模塊,這樣如果組件的用戶從不訪問很少使用的類型,那麼組件的用戶將不需要0來部署該模塊。
csc /t:module RUT.cs
此行使C#編譯器創建一個RUT.netmodule文件。該文件是一個標準的DLL PE文件, ,但本身CLR無法加載它。 接下來讓我們將常用的類型編譯到它們自己的模塊中。我們將使該模塊成爲程序集清單的守護者,因爲這些類型經常使用。實際上,因爲此模塊 現在將代表整個程序集,因此我將將輸出文件的名稱更改爲MultiFileLibrary.dll ,而不是將其稱爲FUT.dll。
csc /out:MultiFileLibrary.dll /t:library /addmodule:RUT.netmodule FUT.cs
該行告訴C#編譯器編譯FUT.cs文件以生成MultiFileLibrary.dll文件。因爲指定了 /t:library,所以包含清單元數據表的DLL PE文件被髮送到MultiFileLibrary.dll文件中。 /addmodule:RUT
.netmodule開關告訴編譯器RUT.netmodule 是應該被視爲程序集的一部分的文件。具體而言,/addmodule
開關告知 編譯器將文件添加到FileDef清單元數據表,並將RUT.netmodule的公開 導出的類型添加到ExportedTypesDef清單元數據表。
編譯器完成其所有處理後,將創建圖2-1中顯示的兩個文件。 右側的模塊包含清單。
使用集鏈接
的效用Al.exe工具可以產生EXE或只包含描述的其他模塊的 類型的清單一個DLL PE文件。爲了理解AL.exe的工作原理,讓我們改變MultiFileLibrary.dll 程序集的構建方式。
csc /t:module RUT.cs
csc /t:module FUT.cs
al /out: MultiFileLibrary.dll /t:library FUT.netmodule RUT.netmodule
圖2-3顯示了執行這些語句後產生的文件。
我建議你讀第2章:建築,包裝,部署和管理由傑弗裏裏希特應用程序和類型從通過C#CLR來詳細瞭解這個概念。
可能的重複[什麼是在.NET中的模塊?](http://stackoverflow.com/questions/645728/what-is-a-module-in-net) – 2014-02-05 21:51:21