使用.NET建立的可执行程序 *.exe,并没有直接承载到进程当中,而是承载到应用程序域(AppDomain)当中。应用程序域是.NET引入的一个新概念,它比进程所占用的资源要少,可以被看作是一个轻量级的进程。
在一个进程中可以包含多个应用程序域,一个应用程序域可以装载一个可执行程序(*.exe)或者多个程序集(*.dll)。这样可以使应用程序域之间实现深度隔离,即使进程中的某个应用程序域出现错误,也不会影响其他应用程序域的正常运作。
当一个程序集同时被多个应用程序域调用时,会出现两种情况:
第一种情况:CLR分别为不同的应用程序域加载此程序集。
第二种情况:CLR把此程序集加载到所有的应用程序域之外,并实现程序集共享,此情况比较特殊,被称作为Domain Neutral。
2.1 在AppDomain中加载程序集
通过CreateDomain方法可以建立一个新的应用程序域。下面的例子将使用CreateDomain建立一个应用程序域,并使用Load方法加载程序集Model.dll。最后使用GetAssemblies方法,列举此应用程序域中的所有程序集
var appDomain = AppDomain.CreateDomain("NewAppDomain");
appDomain.Load(“Common");
foreach (var assembly in appDomain.GetAssemblies())
Console.WriteLine(string.Format("{0}\n----------------------------",
assembly.FullName));
Console.ReadKey();
注意:当加载程序集后,就无法把它从AppDomain中卸载,只能把整个AppDomain卸载
当需要在AppDomain加载可执行程序时,可以使用ExecuteAssembly方法。
AppDomain.ExecuteAssembly("NewAppDomain");
作者太难了给作者点辛苦费吧