为什么添加 Microsoft.Extensions.Logging 导致无法加载文件或程序集 System.Net.Http version=4.2.0?

Why does adding Microsoft.Extensions.Logging cause could not load file or assembly System.Net.Http version=4.2.0?

我开始从一个新的 .Net 4.6.2 单元测试项目中获取。这真的是 st运行ge 所以我开始用一个简化的项目重现,我有 put on Github and attached. Unzip and run Nuget restore in VS. There are 2 commits. The first has it failing and the 2nd has it fixed after removing the "Microsoft.Extensions.Logging.Abstractions" 和 Microsoft.Extensions.Logging NuGet 包。重新添加那个包会导致测试失败.

请帮助我理解这个 st运行ge 问题。这个来自 .Net Standard 的包有什么用吗?根据 apisofnetSystem.Net.Http 来自 .NET Core + 平台扩展,但我没有使用 .Net Core。

如何继续使用 System.Net.Http 版本 4.0.0.0? 构建输出有:统一的主要参考 "System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".

更新说明:我 运行 通过同样的练习从我的第一次提交中删除了 Nuget 包,但测试没有通过,所以所有这些可能都是转移注意力的问题。下面的截图显示我反正成功了一次

更新 2:我通过提交逐步复制了它:https://github.com/aligneddev/UseSystemNetHttpReferencing/commits/reproduce。我删除了所有包,然后在删除最后一个包后 Microsoft.Extensions.DependencyInjection.Abstractions - system.Net.http is missing build 错误。然后我用 ReSharper 添加了参考,单元测试通过了!

最后更新:降级到 .Net 4.5.2 也解决了这个问题。我真的不想那样做:-)。

UseSystemNetHttp.Test 项目 app.config 中添加绑定重定向解决了您的问题:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>