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

问题描述 投票:2回答:1

我目前正在.NET标准库1.6中开发一个API包装器,我遇到了一个“问题”或者我的错误理解。

我选择了.Net Standard,因为它可以在不同的平台(.Net Core / .Net Framework等)中使用,所以我创建了一个类来处理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。

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

  • 为什么版本不同?
  • 怎么有人能解决这个问题? (现在我去了.Net Standard 1.1以使其工作)
  • 这是一个正常的“行为/系统”吗?

感谢您的时间。

c# .net-standard
1个回答
3
投票

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

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

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

诀窍是HttpClient与完整的.Net Framework签名兼容,而次要版本似乎是内部更改,不适用于框架(可能是其他平台?我不确定。)因此,系统。 Net.Http 4.0.0.0是.Net Framework的正确版本,而4.3.0是适用的.Net标准版本号。绑定重定向是这个和其他几个案例的正确解决方案。

我个人遇到了问题,给出了MissingMethodException,并将其追溯到HttpClient版本不匹配,正如您所描述的那样。 (我希望我的这篇评论有助于拯救别人我花在试图追踪它的时间!)

© www.soinside.com 2019 - 2024. All rights reserved.