【问题标题】:Replace AppDomain.CreateDomain in .Net Core在 .Net Core 中替换 AppDomain.CreateDomain
【发布时间】:2021-07-23 16:37:15
【问题描述】:

我正在尝试迁移到不再支持应用程序域的 .Net 5。

我使用 .Net Framework 中的应用程序域来启动多个 WPF 测试,但它们之间没有交互。

 var appDomain = AppDomain.CreateDomain("Friendly name");

并使用 appDomain 来执行应用程序。 在 .Net 5 中,这不再可能。

我查看了AssemblyLoadContext,我找不到任何方法来实现这种隔离。

我使用 MS 测试作为测试框架,我找不到将每个测试隔离到单个进程的方法。

【问题讨论】:

  • Creating a process for each test is an overkill 与为了运行测试而创建 整个 AppDomains 相比,不,不是。仅仅因为它比调用AppDomain.CreateDomain 更费力并不过分。
  • App 域不是在进程中创建的吗?
  • AppDomain 在 .NET Core/5.0 中不是一个东西,而且很可能永远不会。忘记它们的存在吧。
  • 大多数测试框架都可以选择在隔离进程中运行单独的测试/测试类。也许包括你正在使用的测试框架,这样你就可以得到真正的问题的答案
  • 如果要隔离,必须新建一个OS进程。除此之外没有什么。

标签: c# .net .net-core applicationdomain


【解决方案1】:

从 AppDomain 迁移到 AssemblyLoadContext 也许您仍在应用程序中使用 AppDomain。现在,下面的代码展示了如何用 AssemblyLoadContext 的适当等效方法替换 AppDomain 方法

请按照以下参考了解实现和更多详细信息:

  // Create new "context" for loading assemblies:  

  var appDomain = AppDomain.CreateDomain("MyAppDomain");
  var assemblyLoadContext = new MyAssemblyLoadContext(name: "MyAssemblyLoadContext", isCollectible: true);

https://docs.microsoft.com/en-us/dotnet/api/system.runtime.loader.assemblyloadcontext?view=netcore-3.0

https://codetherapist.com/blog/netcore3-plugin-system/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多