Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.Net核心-应用程序部件-防止将程序集加载到应用程序域_C#_.net_Asp.net Core_.net Core_Appdomain - Fatal编程技术网

C# ASP.Net核心-应用程序部件-防止将程序集加载到应用程序域

C# ASP.Net核心-应用程序部件-防止将程序集加载到应用程序域,c#,.net,asp.net-core,.net-core,appdomain,C#,.net,Asp.net Core,.net Core,Appdomain,我有一个web应用程序,它有几个依赖项(模块),应该根据配置动态加载。出于某种原因,ASP.Net Core将其中一些依赖项添加为ApplicationPart,并将这些程序集加载到应用程序域中。即使我从ApplicationParts列表中删除这些程序集,它们仍然是应用程序域的一部分,无法卸载。有什么方法可以阻止它吗?您可以使用下面的代码删除应用程序部件,请尝试一下并告诉我 public void ConfigureServices(IServiceCollection services) {

我有一个web应用程序,它有几个依赖项(模块),应该根据配置动态加载。出于某种原因,ASP.Net Core将其中一些依赖项添加为ApplicationPart,并将这些程序集加载到应用程序域中。即使我从
ApplicationParts
列表中删除这些程序集,它们仍然是应用程序域的一部分,无法卸载。有什么方法可以阻止它吗?

您可以使用下面的代码删除应用程序部件,请尝试一下并告诉我

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers()
        .ConfigureApplicationPartManager(o =>
        {
            o.ApplicationParts.Clear();
            o.ApplicationParts.Add(new AssemblyPart(typeof(Startup).Assembly);
        });
}

“应该动态加载”是什么意思?如果ASP.NET Core将它们添加为应用程序部件,那么显然它们会被引用并因此加载。此外,将它们添加为应用程序部件意味着控制器。查看组件时,会发现标记帮助程序(如果未加载,则不会发生)。@AlexanderChristov我的意思是,有一个代码基于appsettings.json加载程序集(使用
assembly.Load
)。问题是,在
services.AddMvc
之后,即使是未使用的程序集也会被加载,因为它们位于
bin
文件夹中。因此,在此方法之前,
AppDomain.GetAssemblies
给出了一个较小的程序集列表,之后显示加载了几个额外的程序集。不仅是ASP.Net核心程序集,而且我的自定义程序集不应该一次加载。因此,请使用专用文件夹,例如“Modules”。例如,它可能位于应用程序根文件夹中。这将允许更好地控制加载的内容和原因。是的,这是一个选项,但在这种情况下,我需要一些编译后步骤来将程序集移出bin folderNo。正如我所说,即使我从ApplicationPart list中删除这些程序集,它们仍然是应用程序域的一部分,无法删除unloaded@Random你能把密码写下来吗,你在用什么?