官方文档地址:https://docs.microsoft.com/zh-cn/dotnet/framework/app-domains
解释--表示应用程序域,它是一个应用程序在其中执行的独立环境。
用处--如果要创建将托管公共语言运行时的应用程序、要创建以编程方式卸载的工具/代码或要创建可以动态卸载和重载的可插入组件,需要创建自己的应用程序域。
(详解:https://docs.microsoft.com/zh-cn/dotnet/framework/app-domains/application-domains)
补充:全局程序集缓存
安装了公共语言运行时的每台计算机均具有计算机范围的代码缓存,称为全局程序集缓存。 全局程序集缓存中存储专门指定给由计算机中若干应用程序共享的程序集。
只能在需要时才通过将程序集安装到全局程序集缓存中来共享程序集。 一般原则是:程序集依赖项保持专用,并将程序集放在应用程序目录中,除非明确要求共享该程序集。 另外,无需为了使 COM 互操作或非托管代码可以访问程序集而将程序集安装到全局程序集缓存。(亲测:程序集的安装需要安装强类型程序集,且不能在使用进程中被卸载(教程:https://docs.microsoft.com/zh-cn/dotnet/standard/assembly/sign-strong-name))
感觉AppDomain的作用是为了隔断数据,保证一个安全性。这个功能可以通过代码的健壮性来进行一个弥补。
总的来说这块的东西暂时用的不多,没有实际的经验。待有经验后补充。
补充:要想跨应用程序域通信,则需要MarshalByRefObject对象抑或是继承了他的类的对象
下面是官网DEMO
using System;
using System.Reflection;
using System.Threading;
class Module1
{
public static void Main()
{
// Get and display the friendly name of the default AppDomain.
string callingDomainName = Thread.GetDomain().FriendlyName;
Console.WriteLine(callingDomainName);