尽管正确设置了绑定重定向,但无法在运行时加载程序集

Could not load assembly during runtime although binding redirect is correctly set

我有一个 单元测试项目 .NET 4.6.1,其中一些测试很可能会失败,因为我添加了一个新项目作为对单元测试项目的新引用。

这是我遇到的错误:

Error: System.IO.FileLoadException: 
Could not load file or assembly 'Microsoft.Extensions.DependencyInjection.Abstractions, Version=1.1.1.0, 
Culture=neutral, PublicKeyToken=adb9793829ddae60' or one of its dependencies.
 The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040).

然后我在单元测试项目的app.config中添加了这个配置:

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Extensions.DependencyInjection.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.1.1.0" newVersion="1.1.1.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

但测试仍然失败并显示相同的错误消息。

为什么绑定重定向没有帮助?

我在单元测试 .csproj 文件中当然也有这些道具:

<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>

当我检查调试文件夹中生成的 unit.test.config 文件时,它确实包含许多绑定重定向,但不是我的测试失败的原因...

刚刚在重建解决方案后的输出框中发现了这个:

NU1605:检测到包降级:Microsoft.Extensions.DependencyInjection 从 2.2.0 到 1.1.1。直接从项目引用包到 select 不同的版本。

 UnitTests -> MyNewReferencedProject -> Microsoft.ApplicationInsights.WorkerService 2.14.0 -> Microsoft.Extensions.DependencyInjection (>= 2.2.0) 

 UnitTests -> Microsoft.Extensions.DependencyInjection (>= 1.1.1)

这个“警告”是否与我的问题有任何关系,因为我的问题是关于装配的 Microsoft.Extensions.DependencyInjection.Abstractions

关于Microsoft.Extensions.DependencyInjection

我的解决方案项目的所有 debug\bin 文件夹中都有 Microsoft.Extensions.DependencyInjection.Abstractons.dll 的这些程序集版本。

我好像有 3 个不同的版本...

这真的很时髦......当我现在添加这个绑定重定向时:

 <dependentAssembly>
        <assemblyIdentity name="Microsoft.Extensions.DependencyInjection.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
      </dependentAssembly>

之前的运行时异常消失了,因为我得到了一个新的。

看来我修复了它,但是...这是不稳定的东西。随机狗屎...

为什么使用 2.1.0.0 修复了它???

@Mark Gravell

没有内部异常它的 NULL。

这就是消息:

Could not load file or assembly 'Microsoft.Extensions.DependencyInjection.Abstractions, Version=1.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

奇怪的是我的测试没有真正执行我的意思是我无法调试它们。他们刚开始,我立即得到这个异常的脸!

这似乎已经解决了问题,但对我来说不合逻辑。

 <dependentAssembly>
        <assemblyIdentity name="Microsoft.Extensions.DependencyInjection.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
      </dependentAssembly>