我目前正在.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。这让我想到了我的问题:
感谢您的时间。
根据@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版本不匹配,正如您所描述的那样。 (我希望我的这篇评论有助于拯救别人我花在试图追踪它的时间!)