.NET 库 1.6 中的 HttpClient 在 .NET Framework 或单元测试中使用时出错

HttpClient in a .NET Library 1.6 gives error when used in .NET Framework or Unit Test

我目前正在 .NET 标准库 1.6 中开发一个 API 包装器,我遇到了一个 "problem" 或我的误解.

我选择 .Net Standard 是因为它可以用于不同的平台(.Net Core / .Net Framework 等)所以我创建了一个 class 来处理 API 的 Http 端(发出 GET 请求)。问题是.Net Standard 1.6 中System.Net.Http 的版本是4.3.0.0,但是.Net Framwork 或Unit Test 甚至Nuget 中System.Net.Http 的版本是4.0.0.0。

这导致 运行 一个使用我的库的应用程序失败,说它没有找到程序集 System.Net.Http,版本=4.3.0.0。这让我想到了我的问题:

感谢您的宝贵时间。

根据@terrajobst on GitHub,您需要手动将绑定重定向属性添加到.net 框架项目的csproj 文件中。

<PropertyGroup>
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>

绑定重定向会自动添加到应用程序项目类型,但不会添加到 class 库...这也适用于单元测试库。

诀窍是 HttpClient 与完整的 .Net Framework 签名兼容,次要版本似乎是内部更改,不适用于该框架(可能是其他平台?我不确定。)作为结果,System.Net.Http 4.0.0.0 是 .Net Framework 的正确版本,而 4.3.0 是适用的 .Net Standard 版本号。绑定重定向是这种情况和其他几种情况的正确解决方案。

我个人 运行 给出了 MissingMethodException 的问题,并将其追溯到 HttpClient 版本不匹配,正如您所描述的那样。 (我希望我包含这条评论可以帮助其他人节省我试图追踪它的时间!)