C# Asp.net核心加载程序集

C# Asp.net核心加载程序集,c#,dll,asp.net-core,asp.net-core-mvc,.net-assembly,C#,Dll,Asp.net Core,Asp.net Core Mvc,.net Assembly,我正在尝试从文件夹加载一些.dll文件: var fileNames = Directory .GetFiles(path, "*.dll", searchOption); var assemblyNames = fileNames .Select(AssemblyLoadContext.GetAssemblyName); List<Assembly> assemblies = new List<Assembly>

我正在尝试从文件夹加载一些.dll文件:

    var fileNames = Directory
        .GetFiles(path, "*.dll", searchOption);
    var assemblyNames = fileNames
        .Select(AssemblyLoadContext.GetAssemblyName);

    List<Assembly> assemblies = new List<Assembly>();
    foreach (AssemblyName assemblyName in assemblyNames)
    {
        assemblies.Add(Assembly.Load(assemblyName));
    }
var fileNames=目录
.GetFiles(路径“*.dll”,搜索选项);
var assemblyNames=文件名
.选择(AssemblyLoadContext.GetAssemblyName);
列表程序集=新列表();
foreach(AssemblyName中的AssemblyName AssemblyName)
{
assemblies.Add(Assembly.Load(assemblyName));
}
但不知何故,无法加载程序集:
FileNotFoundException,无法加载文件或程序集[…]系统找不到指定的文件。

这怎么可能,因为文件肯定在那里


如果您需要更多背景信息,我可以提供其他信息。

要从文件加载程序集,使用assembly.LoadFrom()函数更容易。在您的应用程序中,是如下所示:

var fileNames=Directory.GetFiles(路径“*.dll”,搜索选项)

List assemblies=new List();
foreach(文件名中的字符串文件名)
{
Add(Assembly.LoadFrom(fileName));
}

[编辑]


如果试图加载程序集以供以后在应用程序中使用(例如,您在Visual Studio中引用了该程序集),建议您实现AppDomain.AssemblyResolve事件。当找不到程序集且需要加载时,将触发AppDomain.AssemblyResolve事件。此时,您可以在不同的文件位置向AppDomain提供程序集。

使用以下语句:

using System.Reflection;
using System.Runtime.Loader;
试试这个:

var myAssembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(pathTodll);

在调试中,是否填充了
文件名
是的,它是一个字符串数组,第一个条目是:“Uploads\\TestPlugin.dll”,感谢您的回复。但我得到以下错误:“Assembly”不包含“LoadFrom”的定义。在哪里可以找到该方法?LoadFrom方法是.NET Framework的内置部分。但它不是asp.net核心框架()的一部分?我没有对程序集的引用,DLL应该在运行时添加。@在.NET Core中,您必须使用
AssemblyLoadContext
加载程序集。它的API文档:@Pranav我得到了与以下相同的错误:
AssemblyLoadContext.Default.LoadFromAssemblyName(assemblyName)
var myAssembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(pathTodll);