ASP.Net 核心 Web 应用未卸载动态加载的其他 Razor 程序集

ASP.Net core web app not unloading other Razor Assembly which were loaded dynamically

提问人:DevCoder 提问时间:3/14/2023 最后编辑:DevCoder 更新时间:3/15/2023 访问量:75

问:

我有一个剃刀 Web 应用程序,其中很少有其他 razor Web 应用程序使用 AssemblyLoadContext 动态添加

Assembly assembly = _loadContext.LoadFromAssemblyPath(pluginLocation);

由于 razor 应用程序集是在运行时添加的,因此需要将程序集添加到 AddApplicationPart。_builder.AddApplicationPart(assembly);

完成上述步骤后,我能够浏览动态添加的 razor Web 应用程序。

卸载动态添加的程序集(razor Web 应用)时出现问题。

我卸载程序集(razor Web 应用程序)的步骤是

  • ApplicationPartManager 中删除了 CompiledRazorAssemblyPartAssemblyPart
  • 使用 _loadContext.Unload() 卸载 AssemblyLoadContext
  • 使用 GC 进行垃圾回收。收集()

即使执行上述步骤,也可以访问动态加载的 Razor Web 应用 URL/页面。请提出删除程序集的解决方案。

Razor ASP.Net-core-MVC 加载 动态程序集 AssemblyLoadContext

评论

0赞 Xinran Shen 3/15/2023
为什么要在加载程序集后对其进行远程操作?
0赞 DevCoder 3/15/2023
@XinranShen 应用程序的每个模块都创建为单独的 Razor Web 应用。因此,为了阻止对该模块/功能的访问,我计划卸载程序集。我需要在运行时执行此操作,以便不需要重新启动 Kestrel。
0赞 Xinran Shen 3/16/2023
在 MS Docs 中,若要卸载 .NET Framework 中的程序集,必须卸载包含该程序集的所有应用程序域。若要卸载应用程序域,请使用 AppDomain.Unload 方法。有关更多信息,请参见如何:卸载应用程序域。希望它能给你一些帮助。
0赞 DevCoder 3/16/2023
@XinranShen 我正在使用 .net core Web 应用。 在 .net core 中,只允许 1 个 AppDomain。尝试创建新的应用程序域或卸载现有应用程序域时,将抛出错误

答: 暂无答案