【发布时间】:2020-01-22 10:06:44
【问题描述】:
我有一个包含多个依赖项(模块)的 Web 应用程序,应该根据配置动态加载。出于某种原因,ASP.Net Core 将其中一些依赖项添加为 ApplicationPart,并将这些程序集加载到应用程序域中。即使我从ApplicationParts 列表中删除这些程序集,它们仍然是应用程序域的一部分并且无法卸载。有什么办法可以预防吗?
【问题讨论】:
-
“应该动态加载”是什么意思?如果 ASP.NET Core 将它们添加为应用程序部件,那么显然它们被引用并因此被加载。此外,将它们添加为应用程序部件意味着控制器。查看组件,发现标签助手(如果没有加载它们就不会发生)。
-
@AlexanderChristov 我的意思是有一个基于 appsettings.json 加载程序集的代码(使用
Assembly.Load)。问题是在services.AddMvc之后,甚至未使用的程序集也会被加载,因为它们位于bin文件夹中。因此,在此方法之前AppDomain.GetAssemblies给出了一个较小的程序集列表,之后它显示加载了几个额外的程序集。不仅是 ASP.Net Core 程序集,还有我不应该一次加载的自定义程序集 -
因此,请使用专用的“模块”文件夹。例如,它可能位于您的应用程序根文件夹中。这将允许更好地控制加载的内容和原因。
-
是的,这是一个选项,但在这种情况下,我需要一些构建后步骤将程序集移出 bin 文件夹
标签: c# .net asp.net-core .net-core appdomain