编译时System.Net.Http类型不匹配

时间:2018-01-11 10:43:00

标签: .net asp.net-web-api

自从.Net Framework Web Api2项目更新到.Net Framework 4.7.1并更新对现在本机System.Net.Http库的引用以来,我们现在在编译时(不是典型的运行时)得到以下错误。因此,装配绑定重定向无效。

  

两者中都存在“HttpResponseMessage”类型   'System.Net.Http,Version = 4.0.0.0,Culture = neutral,   PublicKeyToken = b03f5f7f11d50a3a'和'System.Net.Http,   版本= 4.2.0.0,文化=中立,   PublicKeyToken = b03f5f7f11d50a3a'SkinOnline.Web C:_dev \ MapsOnline.Web \ API \ Controllers \ Utilites \ LongProcessController.cs

我不知道旧版本的来源 - 可能是项目依赖项之一。

修改 所以从

添加dll之后
  

C:\ Program Files(x86)\ Reference   组件\微软\ Framework.NETFramework \ v4.7.1

在引用下,路径已更改为

  

C:\ VS2017 \的MSBuild \微软\ Microsoft.NET.Build.Extensions \ net471 \ lib中\ System.Net.Http.dll

这就是说版本是4.2.0.0

2 个答案:

答案 0 :(得分:6)

所以实际上新的原生文件是版本4.2.0.0(不知道在这个整合是4.3.3之前,人们在这里做了什么最新版本)。

确实,我们确实需要绑定重定向。

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
  </dependentAssembly>

没有它我会得到奇怪的运行时错误

  

System.MissingMethodException找不到方法:   “System.Net.Http.HttpRequestMessage   System.Web.Http.ApiController.get_Request()”

答案 1 :(得分:2)

您遇到的问题是,即使将新的System.Net.Http二进制文件(4.2.0.0)复制到应用程序的同一文件夹中,VS工具也不会自动生成正确的绑定重定向。我们最近通过此拉取请求修复了此问题:https://github.com/dotnet/corefx/pull/25786

一旦Visual Studio使用了该修复程序,将自动为您生成正确的绑定重定向,您将不再看到此问题。此修复程序将包含在Visual Studio 15.6 Preview 3中。目前,手动添加绑定重定向将起到作用。