.net core 为什么微软要把AppDomain带回.NETCore3.0?

.net core 为什么微软要把AppDomain带回.NETCore3.0?,.net-core,appdomain,.net Core,Appdomain,微软从内存中拿走了AppDomain,这个机制已经关闭 现在我突然发现AppDomain又回来了: Assembly System.Runtime.Extensions,版本=4.2.1.0,区域性=中性, PublicKeyToken=b03f5f7f11d50a3a\dotnet\packs\Microsoft.NETCore.App.Ref\3.0.0\Ref\netcoreapp3.0\System.Runtime.Extensions.dll 程序集包含AppDomain类 我的问题是

微软从内存中拿走了AppDomain,这个机制已经关闭

现在我突然发现
AppDomain
又回来了:

Assembly System.Runtime.Extensions,版本=4.2.1.0,区域性=中性, PublicKeyToken=b03f5f7f11d50a3a\dotnet\packs\Microsoft.NETCore.App.Ref\3.0.0\Ref\netcoreapp3.0\System.Runtime.Extensions.dll

程序集包含AppDomain类

我的问题是:为什么

为什么要停产?AppDomains需要运行时支持,并且是 一般来说相当贵。虽然仍由CoreCLR实现,但 在.NET本机中不可用,我们不打算添加此功能 在那里

我应该改用什么?AppDomains用于不同的应用程序 目的。对于代码隔离,我们建议使用流程和/或 容器。对于程序集的动态加载,我们建议使用新的 AssemblyLoadContext类

此外

当然,只是因为有些东西不是 今天在.NET Core中可用并不意味着我们停止使用它。大多数 这仅仅意味着我们没有时间调查 移植是有意义的,或者认为它与 NET核心目前提供的应用程序模型。因此,这是一个领域 我们非常希望得到您的反馈

那么究竟支持什么呢

在.NET内核上,AppDomain实现受到设计和性能的限制 不提供隔离、卸载或安全边界。对于 .NET核心,只有一个AppDomain。隔离和卸载是必要的 通过AssemblyLoadContext提供。安全边界应该是 由工艺边界和适当的远程处理技术提供

它用于某些任务,但在很多情况下不受支持 方式

适用于

.NET核心

  • 3.0 2.2.1 2.0
.NET框架

  • 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1 4.6 4.5.2 4.5.1 4.5 4.0 3.5 3.0 2.0 1.1
.NET标准

  • 2.1.2.0
那么,如果您使用了不受支持的东西,会发生什么呢

它要么不在那里,要么你得到一个大的
抛出新的NotSupportedException
平台NotSupportedException
,具体取决于时间、地点和原因

进一步阅读