【问题标题】:System.Net.Http reference conflict possibly due to .NET Standard 2.0System.Net.Http 引用冲突可能是由于 .NET Standard 2.0
【发布时间】:2018-11-02 07:35:55
【问题描述】:

在构建 .NET 项目时,我可以看到

发现不同版本的“System.Net.Http”之间存在冲突 无法解决。

此外,在拨打HttpClient.GetAsync(Uri) 时遇到异常

对象引用未设置为对象的实例

HttpClient 对象不应该为空,因为我在其上设置了 DefaultRequestHeaders,并且此时没有发生异常。

这发生在引用 System.Net.Http v4.3.3 NuGet 包的 WebAPI 项目中,导致项目具有 System.Net.Http.dll v4.1.1.2。

此 WebAPI 项目还包含对另一个项目的引用(其中包含上述 HttpClient.GetAsync(Uri) 调用),该项目本身也引用 System.Net.Http v4.3.3 NuGet 包,并导致项目具有 System.Net.Http .dll v4.2.0.0。

鉴于两个项目都针对 .NET Framework v4.7.1,为什么这些版本号不同?

我已尝试Update-Package -reinstall 以及删除和重新添加 NuGet 引用。

另一点值得一提的是,所引用的项目(,而不是 WebAPI 项目)又引用了一个 .NET Standard 2.0 项目,该项目也引用了 System.Net.Http v4.3.3。自从这个最里面的项目从 .NET Standard 1.3 更新到 2.0 后,我才遇到这个问题。

所以链条是

    WebAPI (.NET Framework v4.7.1)
> System.Net.Http v4.3.3
> 类库 (.NET Framework v4.7.1)
> System.Net.Http v4.3.3
> 类库 (NET Standard 2.0)
> System.Net.Http v4.3.3

引用 .NET Standard 2.0 和 System.Net.Http 的项目之间存在已知的兼容性问题(请参阅 here),但该问题导致黄色警告星号,而我没有。

谁能解释为什么前两个项目的 System.Net.Http 版本号不同,尽管引用了相同的 NuGet 包,以及我的“未设置对象引用...”异常是否是由于在构建输出?

【问题讨论】:

    标签: asp.net .net asp.net-core nuget .net-standard-2.0


    【解决方案1】:

    我遇到了一个与 .NET Standard 2.0 和绑定重定向有关的类似问题。我通过将以下几行添加到受影响项目的 .csproj 文件(对我来说是一个 unittest 项目)来解决它。该问题已在here 进行了解释。

    <PropertyGroup>
        <RestoreProjectStyle>PackageReference</RestoreProjectStyle>
        <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
    </PropertyGroup>
    

    【讨论】:

    • 谢谢@pfx - 我已经试过了。我找到了一个适合我的类似解决方案,所以我会发布它。
    【解决方案2】:

    我设法通过在 WebAPI 项目中注释掉 System.Net.Http 的绑定重定向来解决解决此问题。

    我不完全确定为什么这有效,但确实有效。我会不时回来查看是否需要将其注释掉。

    【讨论】:

    • 当相应的 NuGet 包有更新时,绑定重定向可能会重新出现。
    猜你喜欢
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-24
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多