尝试将库动态加载到.NET Core应用程序时,我似乎正在运行以下异常:
FileLoadException: Could not load file or assembly 'Microsoft.EntityFrameworkCore, Version=2.2.4.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. Could not find or load a specific file.
stacktrace指向Assembly.LoadFrom
,由以下AppDomain.CurrentDomain.AssemblyResolve
的自定义事件处理程序调用
private Assembly LoadAssembly(string directory, string assemblyName)
{
Assembly assembly = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(a => a.FullName == assemblyName);
if (assembly != null)
return assembly;
Assembly result = null;
var targetFile = System.IO.Path.Combine(directory, assemblyName.Split(',')[0] + ".dll");
if (File.Exists(targetFile))
{
result = Assembly.LoadFrom(targetFile);
}
return result;
}
(注意,从技术上讲,事件处理程序是一个lambda,它会重定向到此方法,因此是异常的签名)
此回调的目的是从已加载的插件解析程序集引用-到我们到达此处时,我们已经成功调用了Assembly.LoadFrom一次。
执行显然已经超过了文件是否存在的检查;但是,我无法确定加载失败的原因。
我可以确定的唯一可能原因是它达到了与以下类似的验证:
从.NET Framework 4开始,默认情况下,无法执行在从远程位置加载的程序集中执行代码的功能,并且对LoadFrom方法的调用会引发FileLoadException。
来自Microsoft Docs - .NET Framework Assembly.LoadFrom
但是,该程序并不会在所有加载上都失败,而只是对该程序集的第一次加载。具体来说,另外两个程序集会预先成功-一个在回调外部,一个在回调内部,然后再尝试解析Microsoft.EntityFrameworkCore.dll
。我已经确认该文件存在于目标位置。
有什么建议吗?