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

C# .NET库1.6中的HttpClient在.NET Framework或单元测试中使用时出错,c#,.net-standard,C#,.net Standard,我目前正在.NET标准库1.6中开发一个API包装器,我遇到了一个“问题”或我的部分没有理解 我选择.Net标准是因为它可以在不同的平台(.Net Core/.Net Framework等)中使用,所以我创建了一个类来处理API的Http端(发出GET请求)。问题是.Net标准1.6中的System.Net.Http版本是4.3.0.0,而.Net Framwork或Unit Test甚至Nuget中的System.Net.Http版本是4.0.0.0 这导致运行使用my library的应用程

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

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

这导致运行使用my library的应用程序失败,表示找不到程序集System.Net.Http,Version=4.3.0.0。这就引出了我的问题:

  • 为什么版本不同
  • 有人怎么能解决这个问题?(现在,我转到.Net标准1.1以 让它工作)
  • 这是正常的“行为/系统”吗
感谢您抽出时间。

根据,您需要手动将绑定重定向属性添加到.net framework项目的csproj文件中

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

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

诀窍在于HttpClient符合完整的.Net框架的签名,并且次要版本似乎是内部更改,不适用于框架(可能是其他平台?我不确定)。因此,System.Net.Http 4.0.0是.Net框架的正确版本,而4.3.0是适用的.Net标准版本号。对于这种情况和其他几种情况,绑定重定向是正确的解决方案


我个人在给出
MissingMethodException
时遇到了这个问题,并将其归结为HttpClient版本不匹配,正如您所描述的。(我希望我的评论能帮助其他人节省我花在追踪它上的时间!)

你不应该使用
System.Net.Http
?我想问题真的是你应该使用Net 4.0(32位)还是Net 4.5(64位)。网络版本之间可能存在不匹配。如果API是使用64位网络构建的,它将不会从使用32位网络构建的应用程序运行。您使用哪个框架版本?因为我记得,即使是4.6.2也不能引用.NET标准1.6。或者是哪个工具版本?(因为即将推出的工具将允许4.6.1+项目引用.net标准,最高可达2.0,包括1.6)-抱歉,它确实是System.net.Http-我在1.6中创建了该项目,使用了它的HttpClient版本,并希望在UnitTest/.net Framework 4.6.x中对其进行测试,但它不起作用,说它无法加载程序集,因此,我看到了版本的差异,所以我不得不切换到.Net标准1.1;我只是想知道为什么标准1.6不能被其他应用程序使用,除非你降级到1.1。谢谢你,还有足够的关键词让谷歌带我到你的帖子。。。