程式集,模組, 應用程式域,全域性程式集快取

2022-03-19 18:55:34 字數 1153 閱讀 9126

1、私有程式集

我們通常用到的就是私有程式集。這種情況下,我們建立本地應用程式專案(或元件),編譯後就生成dll或exe型別的私有程式程式集。當我們在其他客戶應用程式中使用這類程式集時,只需要新增引用。當這樣的程式集被多個應用程式域使用時,每個應用程式域需要複製該程式集,程序中也將存在該程式集的多個副本。

2、共享程式集

與私有程式集相對的是共享程式集(shared assembly),它提供多個應用程式域訪問同乙個程式集的能力,特別地,記憶體中只存在該程式集的同乙份副本,這種非特定於域的**共享極大節省了記憶體資源占用。並且,在大多數情況下,共享程式集安裝在全域性程式集高速緩衝儲存器(global assembly cache)中而不存在於應用程式相關目錄下,對它的引用不會產生檔案複製,自然也不會產生額外的副本。因而,共享程式集不能簡單通過xcopy命令實現部署,而應使用msi(microsoft windows installer)進行。當元件和主應用程式不由同乙個開發商建立,或者乙個大應用程式分布在幾個小工程中時,常常需要使用共享程式集。

建立名稱唯一的共享程式集

與私有程式集不同,使用共享程式集時要遵循許多規則。特別地,共享程式集必須有乙個唯一的名稱(稱為強名strongname)。這個名稱被要求必須是全域性唯一的,並且應該能夠保護該名稱,其他人不能再使用它建立同名程式集。一般地,我們通過巢狀命名空間層次結構來滿足這一要求。結合公司名稱、專案類別(類似資料夾分類)等命名專案類等物件,可以在一定程度上避免程式集重名。而配合使用公共/私有金鑰機制,則可以徹底保證名稱的唯一性。(關於金鑰機制請參見專門的文章),下面簡要說明強名稱工具sn.exe在這方面的應用:

生成公共/私有金鑰對檔案

.net結構中的強名稱工具sn.exe有助於使用強名稱對程式集進行簽名,而通過簽名具有強名稱的程式集,就可以確保名稱的全域性唯一性。sn.exe工具提供用於金鑰管理、簽名生成和簽名驗證的選項。其重要的乙個應用是生成乙個新的金鑰對並將其寫入指定的檔案。引用這個金鑰對檔案的共享程式集將能夠保證唯一的名稱。

如何將乙個cs編譯為模組

csc /target:module hello.cs

如何將乙個模組加入到dll

csc /target:library /addmodule:a.netmodule /out:b.dll

動態載入和建立程式集的例子

程式集和應用程式域

程式集是一組型別和資源的集合,是乙個邏輯功能單元,多個程式集協同工作完成一定的功能。當前主要指.dll檔案或.exe 檔案 程式集清單是程式集的一部分,包含程式集名 程式版本資訊 程式集中所有檔案的列表 型別引用資訊等等 程式集可分為單檔案程式集 例如包含乙個.dll檔案 和多檔案程式集 例如包含乙...

程序,執行緒,應用程式域,程式集,託管

程序 要解決的問題 為了使程式能併發執行,要併發執行就要隔離程序,使程序獨立,即每個程序有屬於自己的資料段 程式段 程序控制塊 託管 託管的 不可以直接寫記憶體,所以是安全的。非託管 非託管的 可以直接讀寫記憶體,不安全,但效率高,像c 中的指標。執行緒 出現的背景 由於程序是乙個資源的擁有者,因而...

應用程式域

一種邊界,它由公共語言執行庫圍繞同一應用程式範圍內建立的物件建立 即,從應用程式入口點開始,沿著物件啟用的序列的任何位置 應用程式域有助於將在乙個應用程式中建立的物件與在其他應用程式中建立的物件隔離,以使執行時行為可以預知。在乙個單獨的程序中可以存在多個應用程式域。以前使用程序邊界來隔離在同一臺計算...