当引用Microsoft.EntityFrameworkCore.dll时Assembly.LoadFrom失败

时间:2019-05-14 04:46:10

标签: .net-core .net-assembly assembly-resolution

尝试将库动态加载到.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。我已经确认该文件存在于目标位置。

有什么建议吗?

0 个答案:

没有答案