進程是存在獨立的記憶體和資源的,但是AppDomain僅僅是邏輯上的一種抽象。一個process可以存在多個AppDomain。各個AppDomain之間的數據時相互獨立的。一個線程可以穿梭多個AppDomain。 一、屬性 ActivationContext 獲取當前應用程式域的激活上下文。Appl
進程是存在獨立的記憶體和資源的,但是AppDomain僅僅是邏輯上的一種抽象。一個process可以存在多個AppDomain。各個AppDomain之間的數據時相互獨立的。一個線程可以穿梭多個AppDomain。
一、屬性
ActivationContext 獲取當前應用程式域的激活上下文。
ApplicationIdentity 獲得應用程式域中的應用程式標識。
ApplicationTrust 獲取說明授予應用程式的許可權以及應用程式是否擁有允許其運行的信任級別的信息。
BaseDirectory 獲取基目錄,它由程式集衝突解決程式用來探測程式集。
CurrentDomain 獲取當前 Thread 的當前應用程式域。
DomainManager 獲得初始化應用程式域時主機提供的域管理器。
DynamicDirectory 獲取目錄,它由程式集衝突解決程式用來探測動態創建的程式集。
Evidence 獲取與該應用程式域關聯的 Evidence。
FriendlyName 獲取此應用程式域的友好名稱。
Id 獲得一個整數,該整數唯一標識進程中的應用程式域。
IsFullyTrusted 獲取一個值,該值指示載入到當前應用程式域的程式集是否是以完全信任方式執行的。
IsHomogenous 獲取一個值,該值指示當前應用程式域是否擁有一個為載入到該應用程式域的所有程式集授予的許可權集。
MonitoringIsEnabled 獲取或設置一個值,該值指示是否對當前進程啟用應用程式域的 CPU 和記憶體監視。 一旦對進程啟用了監視,則無法將其禁用。
MonitoringSurvivedMemorySize 獲取上次完全阻止回收後保留下來的、已知由當前應用程式域引用的位元組數。
MonitoringSurvivedProcessMemorySize 獲取進程中所有應用程式域的上次完全阻止回收後保留下來的總位元組數。
MonitoringTotalAllocatedMemorySize 獲取自從創建應用程式域後由應用程式域進行的所有記憶體分配的總大小(以位元組為單位,不扣除已回收的記憶體)。
MonitoringTotalProcessorTime 獲取自從進程啟動後所有線程在當前應用程式域中執行時所使用的總處理器時間。
PermissionSet 獲取沙盒應用程式域的許可權集。
RelativeSearchPath 獲取基目錄下的路徑,在此程式集衝突解決程式應探測專用程式集。
SetupInformation 獲取此實例的應用程式域配置信息。
ShadowCopyFiles 獲取應用程式域是否配置為影像副本文件的指示。
1 public class Program 2 { 3 static void Main(string[] args) 4 { 5 AppDomain appdomain = AppDomain.CurrentDomain; //獲取當前 Thread 的當前應用程式域。 6 Console.WriteLine(appdomain.Id); //輸出 1 獲得一個整數,唯一標識進程中的應用程式域。 7 Console.WriteLine(appdomain.ActivationContext); //輸出 空白 獲取當前應用程式域的激活上下文。 8 Console.WriteLine(appdomain.ApplicationIdentity); //輸出 空白 獲得應用程式域中的應用程式標識。 9 10 ApplicationTrust AT = appdomain.ApplicationTrust; //獲取說明授予應用程式的許可權以及應用程式是否擁有允許其運行的信任級別的信息。 11 Console.WriteLine(appdomain.ApplicationTrust); //輸出 System.Security.Policy.ApplicationTrust 12 13 Console.WriteLine(appdomain.BaseDirectory); //輸出 F:\xxx\xxx\ConsoleApplication1\bin\Debug\ 獲取基目錄,它由程式集衝突解決程式用來探測程式集。 14 15 AppDomainManager Adm = appdomain.DomainManager; //獲得初始化應用程式域時主機提供的域管理器。 16 Console.WriteLine(Adm.EntryAssembly.Location); //輸出 F:\xxx\xxx\ConsoleApplication1\bin\Debug\ConsoleApplication1.exe 17 Console.WriteLine(appdomain.DomainManager); //輸出 Microsoft.VisualStudio.HostingProcess.VSHostAppDomainManager 18 19 Console.WriteLine(appdomain.DynamicDirectory); //輸出 空白 獲取目錄,它由程式集衝突解決程式用來探測動態創建的程式集。 20 21 Evidence ed = appdomain.Evidence; //另外一個東西了 獲取與該應用程式域關聯的 Evidence。 22 Console.WriteLine(appdomain.Evidence.ToString()); //輸出 System.Security.Policy.Evidence 23 24 Console.WriteLine(appdomain.FriendlyName); //輸出 ConsoleApplication1.vshost.exe 獲取此應用程式域的友好名稱。 25 26 Console.WriteLine(appdomain.IsFullyTrusted); //輸出 True 獲取一個值,該值指示載入到當前應用程式域的程式集是否是以完全信任方式執行的。 27 28 Console.WriteLine(appdomain.IsHomogenous); //輸出 True 獲取一個值,該值指示當前應用程式域是否擁有一個為載入到該應用程式域的所有程式集授予的許可權集。 29 30 Console.WriteLine(AppDomain.MonitoringIsEnabled); //輸出 False 獲取或設置一個值,該值指示是否對當前進程啟用應用程式域的 CPU 和記憶體監視。 一旦對進程啟用了監視,則無法將其禁用。 31 32 AppDomain.MonitoringIsEnabled = true; 33 //要上面那個屬性啟用之後,這個屬性才能用 34 Console.WriteLine(appdomain.MonitoringSurvivedMemorySize); //輸出 0 獲取上次完全阻止回收後保留下來的、已知由當前應用程式域引用的位元組數。 35 Console.WriteLine(appdomain.MonitoringTotalAllocatedMemorySize); //輸出 0 獲取自從創建應用程式域後由應用程式域進行的所有記憶體分配的總大小(以位元組為單位,不扣除已回收的記憶體)。 36 Console.WriteLine(appdomain.MonitoringTotalProcessorTime); //輸出 00:00:00 獲取自從進程啟動後所有線程在當前應用程式域中執行時所使用的總處理器時間。 37 38 System.Security.PermissionSet ps = appdomain.PermissionSet; //獲取沙盒應用程式域的許可權集。 39 40 Console.WriteLine(appdomain.PermissionSet.ToString()); //輸出 <PermissionSet class="System.Security.PermissionSet" version="1" Unrestricted="true"/> 41 42 Console.WriteLine(appdomain.RelativeSearchPath); //輸出 空白 43 44 Console.WriteLine(appdomain.SetupInformation); //輸出 AppDomainSetup 獲取此實例的應用程式域配置信息。 45 46 Console.WriteLine(appdomain.ShadowCopyFiles); //輸出 False 47 48 File.WriteAllText(@"D:\123.txt", appdomain.PermissionSet.ToString()); 49 50 //SetupInformation 獲取此實例的應用程式域配置信息。 51 //ShadowCopyFiles 獲取應用程式域是否配置為影像副本文件的指示。 52 53 Console.ReadKey(); 54 }
二、方法
名稱 說明
ApplyPolicy 返回應用策略後的程式集顯示名稱。
CreateComInstanceFrom(String, String) 創建指定 COM 類型的新實例。 形參指定文件的名稱,該文件包含含有類型和類型名稱的程式集。
CreateDomain(String) 使用指定的名稱新建應用程式域。
CreateInstance(String, String) 創建在指定程式集中定義的指定類型的新實例。
CreateInstanceAndUnwrap(String, String) 創建指定類型的新實例。 形參指定定義類型的程式集以及類型的名稱。
CreateInstanceFrom(String, String) 創建在指定程式集文件中定義的指定類型的新實例。
CreateObjRef 創建一個對象,該對象包含生成用於與遠程對象進行通信的代理所需的全部相關信息。 (繼承自 MarshalByRefObject。)
DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess) 以指定名稱和訪問模式定義動態程式集。
DoCallBack 在另一個應用程式域中執行代碼,該應用程式域由指定的委托標識。
ExecuteAssembly(String) 執行指定文件中包含的程式集。
ExecuteAssemblyByName(String) 在給定其顯示名稱的情況下執行程式集。
GetAssemblies 獲取已載入到此應用程式域的執行上下文中的程式集。
GetData 為指定名稱獲取存儲在當前應用程式域中的值。
GetLifetimeService 檢索控制此實例的生存期策略的當前生存期服務對象。 (繼承自 MarshalByRefObject。)
InitializeLifetimeService 通過防止創建租約來給予 AppDomain 無限生存期。 (重寫 MarshalByRefObject.InitializeLifetimeService()。)
IsCompatibilitySwitchSet 獲取可以為 null 的布爾值,該值指示是否設置了任何相容性開關,如果已設置,則指定是否設置了指定的相容性開關。
IsDefaultAppDomain 返回一個值,指示應用程式域是否是進程的預設應用程式域。
IsFinalizingForUnload 指示此應用程式域是否正在卸載以及公共語言運行時是否正在終止該域包含的對象。
Load(AssemblyName) 在給定 AssemblyName 的情況下載入 Assembly。
ReflectionOnlyGetAssemblies 返回已載入到應用程式域的只反射上下文中的程式集。
SetData(String, Object) 為指定的應用程式域屬性分配指定值。
SetData(String, Object, IPermission) 將指定值分配給指定應用程式域屬性,檢索該屬性時要求調用方具有指定許可權。
SetPrincipalPolicy 指定在此應用程式域中執行時如果線程嘗試綁定到用戶,用戶和標識對象應如何附加到該線程。
SetThreadPrincipal 設置在以下情況下要附加到線程的預設主體對象,即當線程在此應用程式域中執行時,如果線程嘗試綁定到主體這種情況。
Unload 卸載指定的應用程式域。
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 AppDomain app = AppDomain.CreateDomain("測試程式域"); //使用指定的名稱創建應用程式域 6 ObjectHandle objHan = app.CreateInstance("MySpace", "MySpace.Person"); //創建指定程式集中指定的對象 7 var obj = objHan.Unwrap(); 8 Console.WriteLine(obj.ToString()); //輸出 MySpace.Person 9 10 object obj2 = app.CreateInstanceAndUnwrap("MySpace","MySpace.Person"); //創建指定程式中指定的對象,順帶執行了Unwrap方法 11 Console.WriteLine(obj2.ToString()); //輸出 MySpace.Person 12 13 ObjectHandle objHan2 = app.CreateInstanceFrom(@"D:\MySpace.dll", "MySpace.Person"); //從指定的程式集中創建類的對象 14 object obj3 = objHan2.Unwrap(); 15 Console.WriteLine(obj3.ToString()); //輸出 MySpace.Person 16 17 //app.CreateObjRef(); 18 19 app.ExecuteAssembly(@"D:\ConsoleApplication1.exe"); //執行指定文件中包含的程式集 輸出0123456789 20 //D:\ConsoleApplication1.exe的代碼如下 21 //static void Main(string[] args) 22 //{ 23 // for (int i = 0; i < 10; i++) 24 // { 25 // Console.WriteLine(i); 26 // } 27 28 // Console.ReadKey(); 29 //} 30 31 //下麵改動一下D:\ConsoleApplication1.exe,改為在D盤下創建一個文件,並寫入一段文字 32 app.ExecuteAssembly(@"D:\ConsoleApplication1.exe"); //運行之後在D盤下創建了一個文件,並寫入文字 33 //static void Main(string[] args) 34 //{ 35 // File.WriteAllText(@"D:\AppDomainTest.txt","測試測試"); 36 // Console.ReadKey(); 37 //} 38 //註意,此次由於有Console.ReadKey(); 因此執行到這裡要按兩次鍵盤,讓app程式域執行完畢才會又回到主程式域 39 Assembly[] assArr = app.GetAssemblies(); //獲取載入到app應用程式域中的所有程式集 40 41 foreach (var ass in assArr) 42 { 43 Console.WriteLine(ass.FullName); //諸如此類 ConsoleApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 44 } 45 46 //給定Assembly的情況下裝載程式集 47 app.Load("MySpace"); 48 Console.WriteLine(app.IsDefaultAppDomain()); //輸出 False 是否是進程預設的應用程式域 49 50 app.SetData("data1", "我靠"); //為指定的應用程式域屬性分配指定值。 51 object o = app.GetData("data1"); 52 Console.WriteLine(o.ToString()); //輸出 我靠 53 54 //ApplyPolicy 返回應用策略後的程式集顯示名稱。 55 //CreateComInstanceFrom(String, String) 創建指定 COM 類型的新實例。 形參指定文件的名稱,該文件包含含有類型和類型名稱的程式集。 56 //CreateObjRef 創建一個對象,該對象包含生成用於與遠程對象進行通信的代理所需的全部相關信息。 (繼承自 MarshalByRefObject。) 57 //DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess) 以指定名稱和訪問模式定義動態程式集。 58 //DoCallBack 在另一個應用程式域中執行代碼,該應用程式域由指定的委托標識。 59 //ExecuteAssemblyByName(String) 在給定其顯示名稱的情況下執行程式集。 60 //GetLifetimeService 檢索控制此實例的生存期策略的當前生存期服務對象。 (繼承自 MarshalByRefObject。) 61 //InitializeLifetimeService 通過防止創建租約來給予 AppDomain 無限生存期。 (重寫 MarshalByRefObject.InitializeLifetimeService()。) 62 //IsCompatibilitySwitchSet 獲取可以為 null 的布爾值,該值指示是否設置了任何相容性開關,如果已設置,則指定是否設置了指定的相容性開關。 63 //IsFinalizingForUnload 指示此應用程式域是否正在卸載以及公共語言運行時是否正在終止該域包含的對象。 64 //ReflectionOnlyGetAssemblies 返回已載入到應用程式域的只反射上下文中的程式集。 65 //SetPrincipalPolicy 指定在此應用程式域中執行時如果線程嘗試綁定到用戶,用戶和標識對象應如何附加到該線程。 66 //SetThreadPrincipal 設置在以下情況下要附加到線程的預設主體對象,即當線程在此應用程式域中執行時,如果線程嘗試綁定到主體這種情況。 67 //Unload 卸載指定的應用程式域。 68 69 Console.ReadKey(); 70 } 71 }
詳細參考:http://www.cnblogs.com/kissdodog/archive/2013/05/09/3069553.html