当前位置: 首页 > 知识库问答 >
问题:

.NET Core 中没有应用程序域!为什么?

陶法
2023-03-14

微软选择不支持AppDomains有什么强有力的理由吗?网芯?

AppDomains在构建长时间运行的服务器应用程序时特别有用,我们可能希望以一种优雅的方式更新服务器加载的程序集,而无需关闭服务器。

如果没有 AppDomains,我们将如何在长时间运行的服务器进程中替换程序集?

应用程序域还为我们提供了一种隔离服务器代码不同部分的方法。例如,自定义 Websocket 服务器可以在主应用程序域中具有套接字代码,而我们的服务可以在辅助应用程序域中运行。

如果没有AppDomain,上述场景是不可能的。

我可以看到一个论点,它可能会讨论使用云的VM概念来处理程序集更改,而不必招致AppDomains的开销。但这就是微软的想法或说法吗?或者他们对上述情况有具体的原因和备选方案?

共有3个答案

裴实
2023-03-14

为什么停产了?AppDomains需要运行时支持,通常非常昂贵。虽然仍由CoreCLR实现,但在中不可用。我们不打算在那里增加这个功能。

我应该用什么来代替?AppDomain用于不同的目的。为了代码隔离,我们推荐进程和/或容器。对于程序集的动态加载,我们推荐新的AssemblyLoadContext类。

来源: 移植到 .NET Core | .NET 博客

邹杰
2023-03-14

. NETCore子集的目的是保持. NET安装小。并且易于移植。这就是为什么你可以在视窗和OSX上运行Silverlight应用程序,并且在访问网页时不会等待很长时间。下载和安装完整的运行时和框架需要几秒钟,或多或少。

保持它的小型化不可避免地需要削减特征。远程处理在这个列表中排名很高,成本很高。否则会很好地隐藏,但您可以看到委托不再具有函数BeginInvoke()方法。这也将AppDomain放在了剪切列表中,如果没有远程处理支持,您就无法在应用程序域中运行代码。所以这完全是设计出来的。

殷德本
2023-03-14

英寸NET Standard 2的< code>AppDomain类就在里面。然而,该API的许多部分会抛出一个< code > PlatformNotSupportedException 。网芯。

它仍然存在的主要原因是为了基本的东西,比如注册一个可以工作的未处理的异常处理程序。

.NET标准常见问题解答有以下解释:

应用程序域是否是 .NET 标准的一部分?

AppDomain类型是.NET标准的一部分。并非所有平台都支持创建新的应用程序域,例如.NETCore就不支持,因此方法AppDomain也不支持。CreateDomain在.NET Standard中可用时可能引发PlatformNotSupportedException。

我们在. NET Standard中公开这种类型的主要原因是因为使用率相当高,并且通常与创建新应用程序域无关,而是与当前应用程序域交互,例如注册未处理的异常处理程序或请求应用程序的基本目录。

除此之外,其他答案和其他答案也很好地解释了为什么大部分AppDomain仍然被削减(例如抛出一个不受支持的异常)。

 类似资料:
  • 进程:org.wit.assignment,PID:13760 java.lang.runtimeException:无法实例化活动组件信息{org.wit.assignment/org.wit.activities.placeMarkactivity}:java.lang.ClassNotFoundException:未在路径:dexpathList[[zip文件“/data/app/org.w

  • 主要活动 公共类MainActivity扩展AppCompatActivity{String response; 公共类GetExample{OkHttpClient客户端; Xml文件

  • 我正在使用JBoss开发我的第一个Web应用程序,并以Eclipse Luna和Windfly作为服务器。在WEB-INF中,我找不到web.xml文件。一切正常,应用程序正常工作,但是web.xml设置在哪里?如何更改,例如,类URL关联?请注意,我在编码的类中看不到任何注释。

  • 我有一个java应用程序,它在JTabbedPane上加载并显示一个applet。所以基本上GUI是: 小程序-- 我已经在JFrame类中放入了这一标准行: 下面是我在 JFrame 类中的方法,它应该在窗口关闭时调用: 然后,在我的Tabbed Pane类中,我有一个管理Applets的arrayList: 我循环遍历JPanels的ArrayList,如下所示: JPanel类中的stopG

  • 应用程序崩溃,我会得到以下错误: 致命异常:主进程:com.example.ayyan.JellyBeanEstimator,pid:2960 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.ayyan.JellyBeanEstimator/com.example.ayyan.JellyBeanEstimator.MainAc

  • 我有一个模块化的JavaFX应用程序,具有以下Java代码: 这是模块信息。java文件: 我使用以下命令编译模块化JavaFX应用程序: 我使用以下命令打包模块化JavaFX应用程序: 然后我将应用程序保存在我的/应用程序文件夹中(我在Mac OS上),然后打开应用程序。应用程序会打开一个500x500窗口,但不会渲染任何图形,也不会打开web浏览器。应用程序只打开一个白色空白500x500窗口