應用程式域 是 .NET 執行環境的核心隔離單位。與作業系統進程不同,單一進程可承載多個 AppDomain,大幅降低上下文切換成本,並提供錯誤隔離、安全性邊界與動態卸載能力。
class Program {
static void Main() {
AppDomain myDomain = AppDomain.CreateDomain("xuanhunDomain");
Console.WriteLine("新域名稱: {0}", myDomain.FriendlyName);
Console.WriteLine("當前域名稱: {0}", AppDomain.CurrentDomain.FriendlyName);
Console.ReadKey();
}
}

圖 1 建立並列印自訂與預設 AppDomain 名稱
AppDomain.Unload(myDomain);
try {
Console.WriteLine(myDomain.FriendlyName); // 觸發 CannotUnloadAppDomainException
} catch (CannotUnloadAppDomainException e) {
Console.WriteLine(e.Message);
}

圖 2 卸載後嘗試存取域屬性拋出異常
CannotUnloadAppDomainExceptionSetAccessRuleProtection(true, false) 可切斷父域安全設定繼承| 方式 | 機制 | 適用場景 |
|---|---|---|
| MarshalByValue (序列化複本) | 物件完整複製至呼叫端域 | 小型、不可變資料傳遞 |
| MarshalByRefObject (Proxy) | 透過 Proxy 遠端呼叫原物件 | 大型物件、需維持單一狀態 |
注意:跨域呼叫元資料必須雙向可見,否則 JIT 編譯失敗拋出
FileNotFoundException。
作者:玄魂
出處:https://www.cnblogs.com/xuanhun/