6

将我的项目从 MVC4 升级到 MVC5 后,出现以下错误。我遵循如何将 ASP.NET MVC 4 和 Web API 项目升级到 ASP.NET MVC 5 和 Web API 2

Assembly 'WebServices.WebApi.External, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' uses 'System.Web.Http, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' which has a higher version than referenced assembly 'System.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 如何解决这个问题?

4

6 回答 6

4

我也关注那篇文章,但在开始时没有完全成功,但

要修复这个“简单”,请创建新的 web mvc 项目并保存它,然后在记事本中打开 web.config、web.config 从视图、packages.config 和 .csproj

然后打开您的项目并查看文件版本号的条目差异,例如在您应该看到的包中

<package id="Microsoft.AspNet.Mvc" version="5.0.0" targetFramework="net45" />

但你可以拥有

<package id="Microsoft.AspNet.Mvc" version="4.x.x.x" targetFramework="net40" />

在 web.config 中

<dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>

但你可以拥有

<dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>

在 .csproj 中

<Reference Include="System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <Private>True</Private>
      <HintPath>..\packages\Microsoft.AspNet.WebPages.3.0.0\lib\net45\System.Web.Helpers.dll</HintPath>
    </Reference>

但你可以拥有

<Reference Include="System.Web.Helpers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <Private>True</Private>
      <HintPath>..\packages\Microsoft.AspNet.WebPages.2.0.20710.0\lib\net40\System.Web.Helpers.dll</HintPath>
    </Reference>

用更新的值替换所有

之后执行 Ctrl+Shift+B 并在 nuget 控制台中通过命令 Update-Package 更新所有包

对我来说,这项工作终于

于 2013-12-18T08:58:18.893 回答
4

我有类似的问题,这是由于我使用

_bin_deployableAssemblies

此文件夹在版本 4 中包含 System.Web.Http。我删除了此文件夹并且它有效

于 2013-11-12T11:59:41.557 回答
1

You should check all references of WebServices.WebApi.External project. One of them may still use System.Web.Http version 4. Or, try binding it explicitly in web.config

 <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>      
    </assemblyBinding>
  </runtime>
于 2013-11-07T16:24:50.487 回答
1

我通过安装 System.Web.Http.WebHost 解决了这个问题。您可以使用 nuget 安装并搜索 WebHost。这是确切的链接https://www.nuget.org/packages/Microsoft.AspNet.WebApi.WebHost/5.1.0

您也可以从包管理器控制台安装它:PM> Install-Package Microsoft.AspNet.WebApi.WebHost

于 2014-02-02T18:49:51.347 回答
0

有同样的问题。通过使用 Nuget 卸载旧的 AttributeRouting 包解决。当然,它不再需要了。

这也是在一个单元测试项目中。

于 2014-01-17T16:30:26.920 回答
0

就我而言,我刚刚从Web.config文件中删除了麻烦的绑定,从而解决了这个问题。

备份您的web.config,然后简单地擦除dependentAssembly包含assemblyIdentity具有名称的元素的元素System.Web.Http

<dependentAssembly>
  <assemblyIdentity name="System.Net.Http" publicKeyToken="31bf3856ad364e35" />
  <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>

它立即对我有用。

于 2015-12-09T12:09:30.643 回答