编译时出现System.Net.Http类型不匹配的问题

9
自从将一个.Net Framework Web Api2 项目更新到 .Net Framework 4.7.1 并更新了对现在原生的 System.Net.Http 库的引用后,我们现在在编译时(不是典型的运行时)会得到以下错误。因此,程序集绑定重定向无效。
引用如下:

The type 'HttpResponseMessage' exists in both 'System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' and 'System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' SkinOnline.Web C:\_dev\MapsOnline.Web\API\Controllers\Utilites\LongProcessController.cs

我不知道旧版本来自哪里——也许是其中一个项目依赖项。
编辑:
因此,在添加以下 dll 后

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.7.1

路径在引用中改变为

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

且版本为4.2.0.0

你有没有查看项目中的其他层? - anıl yıldırım
2个回答

8

实际上,新的本地文件的版本是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()'。


绑定重定向可以双向工作,并允许选择在项目中使用的程序集的版本。目前似乎这是解决问题的唯一方法。 - Alex T.
4
为了使项目能够构建,您可能需要从项目中删除System.Net.Http引用。 多次安装Nuget包时会自动添加此引用,但可能指向错误的文件。 - CapnChaos
我的Web角色项目中的绑定重定向根本没有解决这个问题。仍在努力寻找解决方案。 - Ashutosh Kumar

2
您遇到的问题是,即使将新的System.Net.Http二进制文件(4.2.0.0)复制到应用程序的相同文件夹中,VS工具未自动生成正确的绑定重定向。我们最近通过以下拉取请求解决了这个问题:https://github.com/dotnet/corefx/pull/25786
一旦Visual Studio消费了该修复程序,正确的绑定重定向将自动为您生成,您将不再遇到此问题。这个修复程序将包含在Visual Studio 15.6 Preview 3中。目前,手动添加绑定重定向也可以解决问题。

谢谢你的回答,它帮助我理解了问题的范围。 - Alex T.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接