生成服务器上的System.Net.Http版本错误。

6
我昨天看到这篇文章,因为我想在我的MVC项目中实现属性路由。所以我按照作者在评论中的提示进行了更新。
链接:http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2
Update-Package Microsoft.AspNet.WebApi.WebHost -Pre

本地一切正常,但是在服务器上无法构建。错误信息如下:

c:\BuildAgent\work\f8d76a59973cd8a9\Packages\Microsoft.AspNet.WebApi.Core.5.0.0-beta2\lib\net45\System.Web.Http.dll : error CS1705: 程序集 'System.Web.Http, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 使用了高版本的 'System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a',而引用程序集 'System.Net.Http, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 版本过低 [C:\BuildAgent\work\f8d76a59973cd8a9\Aggregator\Spin.TradingServices.Aggregator.Web\Spin.TradingServices.Aggregator.Web.csproj]

我大致理解了发生了什么,并在其他帖子中找到了一些相关信息,但似乎都没有起作用。我希望找到一种只需要更改项目而不是服务器的解决方案。

目前为止我已经:

  1. Set copy local to true, for System.Net.Http

  2. Set up binding redirect.

    <assemblyIdentity name="System.Net.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
    

谢谢,希望有人能帮忙。


抱歉如果我理解不正确... System.Net.Http 似乎是一个已引用的程序集... 如果引用了版本4,那么它从哪里获取版本2呢? - Rameez Ahmed Sayad
你可以将相应版本的 System.Net.Http 放在项目文件夹中,这样它会在尝试在其他地方加载之前使用该版本。 - aevitas
Aevitas,似乎不起作用。我只是把dll放在Web项目文件夹里,对吧? - Matt Canty
1个回答

3
现在已经修复了。我做了以下几件事情:
1 - 在程序集中指定版本。
<system.web>
  <compilation debug="true" targetFramework="4.5">
    <assemblies>
      <add assembly="System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </assemblies>
  </compilation>

2 - 将“复制本地”设置为System.Net.Http的真值

3 - 将System.Net.Http.dll v4复制到项目目录中 - 感谢Aevitas。

非常抱歉如果这不能帮助有相同问题的任何人。我必须进行很多小更改,可能没有记住它们所有的。

谢谢


aspnet_compiler.exe在构建使用TLS 1.2的项目时失败,提示“error CS0117: 'System.Net.SecurityProtocolType'不包含'Tls12'的定义”。将targetFramework="4.5"添加到<compilation>标签中解决了编译问题。不需要显式添加程序集。谢谢! - TomEberhard

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