是否每个C#程序都有一个AppDomain?

是否每个C#程序都有一个AppDomain?,c#,.net,appdomain,C#,.net,Appdomain,是否每个C#程序都有一个AppDomain,即使我们没有专门创建AppDomain?为什么需要它?我曾经读到过,如果我们不将第三方程序集加载到单独的AppDomain中,它们会使整个应用程序崩溃。我没有很好地理解那一点。有人能解释一下吗。每个应用程序都至少有一个应用程序域,是的 我不知道关于第三方程序集的说明意味着什么。AppDomain非常像一个进程,它是应用程序运行的基础结构。.NET程序集需要加载到AppDomain中才能运行。不需要将第三方程序集加载到单独的AppDomains,但如果这

是否每个C#程序都有一个AppDomain,即使我们没有专门创建AppDomain?为什么需要它?我曾经读到过,如果我们不将第三方程序集加载到单独的AppDomain中,它们会使整个应用程序崩溃。我没有很好地理解那一点。有人能解释一下吗。

每个应用程序都至少有一个应用程序域,是的


我不知道关于第三方程序集的说明意味着什么。

AppDomain
非常像一个进程,它是应用程序运行的基础结构。.NET程序集需要加载到
AppDomain
中才能运行。不需要将第三方程序集加载到单独的
AppDomains
,但如果这样做,它会在它们之间提供隔离(就像两个单独的进程),并且其中一个进程中的故障不会影响另一个进程。应用程序域可以独立卸载


例如,SQL Server使用
AppDomain
s在其过程中安全地加载CLR程序集。

每个程序至少有一个AppDomain,您可以创建任意多个AppDomain,但很少需要多个AppDomain


它基本上是一个容器,在其中运行具有特定信任的代码。

有一个默认的应用程序域,您的应用程序将加载到其中(每个实例都有自己的应用程序域)

崩溃意味着第三方程序集(即插件)将在您的整个应用程序崩溃时崩溃,如果您不将其加载到单独的应用程序域中。因此,最好将插件加载到单独的应用程序域中,因为应用程序域中的崩溃只会使该应用程序域崩溃,而不会使其他域崩溃。《华尔街日报》对此发表了一些帖子

需要注意的一件重要事情是,应用程序域不一定需要处于同一进程或同一系统中,因此基本上需要它来进行远程处理

我已经阅读了有关第三方程序集导致崩溃,如果我们不使用AppDomain

我认为您正在谈论将其他程序集加载到单独的应用程序域中。通过这种方式,它们可以与您的地址空间隔离,以防止它们的代码崩溃影响您。其代价是,与单独应用程序域中的程序集进行通信更加困难,并且会产生性能损失,因为所有调用都需要跨应用程序域边界进行军事化

这是一个相当超前的话题,我建议你在(其他的书都有)读一读