尽管正确设置了绑定重定向,但无法在运行时加载程序集
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>
我有一个 单元测试项目 .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>