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

Best Practice How to isolate dynamic code / assemblies with .net CORE

我使用 .NET 4.5 创建了一个可扩展的 Web 应用程序。在 运行 次执行来自第三方的认证代码。

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

现在我看到我为此使用的很多技术在 .NET 核心中不再受支持

喜欢:

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

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

但我对其中任何一个都不太满意。一方面,我最终会得到数百个进程。如果我分组我仍然可以在它们之间产生影响。

那么怎样选择才是正确的呢?

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

这不是 AppDomains 的直接替代品,也不是为您提供的隔离级别,但它可能足以满足您的需求 - 它允许您使用 AppDomain.LoadFile 和 [=12 的等价物=] 为您提供程序集加载隔离。

目前没有关于此的任何实际文档,但在此处执行此操作存在问题:https://github.com/dotnet/coreclr/issues/5463