首页 > 解决方案 > System.Net.Http 引用冲突可能是由于 .NET Standard 2.0

问题描述

在构建 .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 的项目之间存在已知的兼容性问题(请参阅此处),但该问题导致黄色警告星号,而我没有。

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

标签: asp.net.netasp.net-corenuget.net-standard-2.0

解决方案


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

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

推荐阅读