最佳实践如何隔离动态代码/程序集与.net CORE

本文关键字:代码 动态 程序集 CORE net 隔离 何隔离 最佳 | 更新日期: 2023-09-27 17:51:22

我用。net 4.5创建了一个可扩展的web应用程序。在运行时执行第三方认证的代码。

为此,我使用应用程序域和进程间通信。

现在我发现我用于此的许多技术在。net core中不再支持

:

  • AppDomains
  • Remoting
  • BinarySerzializers

对于其中的大多数,有明显的解决方案。但是移除AppDomains是一件很困难的事情。

如果我理解正确的话,我应该使用进程。但是如果我的应用程序有大约100个扩展(多个客户)呢?这意味着我必须创建100个进程(微服务),或者至少将一些进程分组在微服务中。

但是两个我都觉得不太舒服。在一种情况下,我最终会得到数百个过程。如果我分组,我仍然可以得到它们之间的影响。

那么正确的选择是什么呢?

最佳实践如何隔离动态代码/程序集与.net CORE

一个可能的解决方案是使用AssemblyLoadContext代替AppDomains。

这不是AppDomains和隔离级别的直接替代,但它可能足以满足您的需求-它允许您使用相当于AppDomain.LoadFileAppDomain.ResolveEvent的组件加载隔离。

目前没有任何真正的文档,但是在这里这样做会有一个问题:https://github.com/dotnet/coreclr/issues/5463