AppDomain與Assembly的載入與解除安裝

2022-01-20 19:31:55 字數 1154 閱讀 3388

為了將問題描述清楚,我們先來看乙個例子。在這個例子中,winform上有乙個按鈕,當使用者點選這個按鈕後,就會裝載乙個已經存在的assembly,並且在介面的label控制項上顯示出這個assembly的fullname。對reflection稍微熟悉一點的朋友都知道,這是非常簡單的事情,只需要用assembly.loadfile方法獲得assembly,然後用fullname屬性來顯示即可,比如下面的**:

view plain

print

?private

void

button1_click(

object

sender, eventargs e)  

當然,程式執行正常,您不會發現任何編譯時或執行時的錯誤。然而,當你在沒有退出此程式之前,再去編譯被呼叫的testlib.dll,你會發現,visual studio無法完成編譯,提示說該檔案正在被其它的程序所使用,如下:

事實上,我們的程式與這個testlib.dll並沒有太大的關聯,我們的程式只不過就是顯示一下testlib.dll的基本資訊。如果testlib.dll是乙個共享的庫,那麼資源獨佔問題會影響到其它程式的正常工作。

view plain

print

?public

class

remoteloader : marshalbyrefobject  

public

string

fullname  

}  }  view plain

print

?public

class

localloader  

public

void

loadassembly(

string

fullname)  

public

void

unload()  

public

string

fullname  

}  }  最後,修改我們winform上的button click事件處理過程,改為如下的形式:

view plain

print

?private

void

button1_click(

object

sender, eventargs e)  

AppDomain與動態引導程式集

是乙個應用程式執行的獨立環境,為執行託管 提供隔離 解除安裝和安全邊界.net 應用程式是由許多程式集組成的,然而不像win32 程式,net 程式是在應用程式域中執行.應用程式域不同於win32 的程序.實際上,之間是完全隔離的.中應用程式是不能共享資訊的 全域性變數,靜態字段 除非用remoti...

應用程式域(AppDomain)

1 進行錯誤隔離和安全設定隔離,乙個應用程式域如果崩潰不會影響其他應用程式域,功能類似於作業系統的程序 2 在.net環境下才產生,因為它在clr中執行 3 應用程式域的建立和銷毀所需的開銷相對於系統程序小,乙個程序中可以包含多個應用程式域其實,程序就是作業系統用來隔離各個不同應用程式的機制。這樣就...

關於C ,CLR,程式集,AppDomain

c 中的程式集形式上是 exe或 dll,兩者的區別是是否有程式的入口函式。程式集是.net型別 資源的集合。程式集又可分為動態程式集和靜態程式集。還記得程式的執行過程麼,編譯 鏈結 裝入,鏈結程式將編譯後的目標程式和用到的庫函式 c 中的include指令就是用來查詢庫的 鏈結在一起形成乙個裝入模...