【问题标题】:System.Net.Http type mismatch at compileSystem.Net.Http 编译时类型不匹配
【发布时间】:2018-01-11 10:43:00
【问题描述】:

由于将 .Net Framework Web Api2 项目更新到 .Net Framework 4.7.1 并更新对现在本机 System.Net.Http 库的引用,我们现在在编译时(不是典型的运行时)收到以下错误。因此程序集绑定重定向无效。

“HttpResponseMessage”类型存在于两者中 'System.Net.Http,版本=4.0.0.0,文化=中性, 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)\参考 程序集\Microsoft\Framework.NETFramework\v4.7.1

一旦在引用下路径已更改为

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

也就是说版本是4.2.0.0

【问题讨论】:

  • 您是否查看过项目中的其他层?

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


【解决方案1】:

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

【讨论】:

  • 绑定重定向双向工作,允许选择在项目中使用哪个版本的程序集。目前看来,这似乎是解决问题的唯一方法。
  • 您可能还需要从项目中删除 System.Net.Http 引用才能构建它。很多时候安装 Nuget 包会自动添加这个引用但指向错误的文件。
  • 在我的网络角色项目中绑定重定向根本没有解决这个问题。仍在努力寻找解决方案。
【解决方案2】:

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

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

【讨论】:

  • 感谢您的回答,这有助于了解问题的范围。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 2015-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多