c# - 尽管正确设置了绑定重定向,但无法在运行时加载程序集
问题描述
我有一个单元测试项目 .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。直接从项目中引用包以选择不同的版本。
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>
推荐阅读
- javascript - 计算器:字符串转换为数学运算 (JavaScript)
- mongodb - MongoDB中的“桶”与数据库和集合之间的关系是什么?
- c++ - 这个for循环可以用预处理器完成吗?
- java - 为什么堆栈迭代器以相反的顺序工作?
- html - HTML 电子邮件:粗体字后,Outlook 中的格式消失
- mysql - Mariadb:ER_PARSE_ERROR,如何解决?
- python-sphinx - 无效的“requirements_file”:路径 docs/requirements.txt 不存在
- macos - MacOS 上的 Sublime SFTP - 如何将文件保存到其他位置?
- python - 如何使用运行多个线程或进程并在 python 中完成时获得结果?
- django - 芹菜不运行简单的打印