错误:在VS2012中将MVC4升级到MVC5

6
我在将我的项目从MVC4升级到MVC5之后遇到了以下错误。我按照《如何升级ASP.NET MVC 4和Web API项目到ASP.NET MVC 5和Web API 2》进行操作。 程序集'WebServices.WebApi.External, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'使用了比所引用程序集'System.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'更高版本的'System.Web.Http, Version=5.0.0.0,Culture=neutral, PublicKeyToken=31bf3856ad364e35' 如何解决这个问题?

升级所有的NuGet包。 - SLaks
我做了,哪个Nuget包含有System.Web.Http? - James123
我不确定。在您的项目中选择该引用并查看其完整路径。 - SLaks
Microsoft.AspNet.WebApi.Core.5.0.0\lib\net45\System.Web.Http.dll - James123
嗯,那应该是版本5。尝试清理解决方案。 - SLaks
6个回答

4

我也尝试按照那篇文章操作,但一开始并没有完全成功。

要解决这个问题,可以创建一个新的Web MVC项目并保存它,然后用记事本打开web.config、views中的web.config、packages.config和.csproj文件。

接下来,打开你的项目,查看文件版本号的差异,例如在packages中应该看到:

<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>

in .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”命令更新所有包。

对我来说,这最终起作用了。


4

我遇到了类似的问题,原因是我使用了名为 _bin_deployableAssemblies 的文件夹。

这个文件夹里的 System.Web.Http 版本是 4。我删除了这个文件夹后问题得以解决。


1
你应该检查WebServices.WebApi.External项目的所有引用。其中一个可能仍在使用System.Web.Http版本4。或者,尝试在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>

1
在升级MVC项目后,我开始收到以上错误。实际上阅读了错误信息后,我发现是单元测试项目中对Web项目的引用导致了问题。将测试项目与相应的版本进行升级后,一切都正常工作了。 - Donovan Woodside

1

0
在我的情况下,我只是从Web.config文件中删除了麻烦的绑定,这解决了问题。
备份您的web.config,然后简单地删除包含名称为System.Web.HttpassemblyIdentity元素的dependentAssembly元素。
<dependentAssembly>
  <assemblyIdentity name="System.Net.Http" publicKeyToken="31bf3856ad364e35" />
  <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>

它对我立即起作用。


0

我曾经遇到过同样的问题。通过使用Nuget卸载旧的AttributeRouting包来解决了这个问题。当然,它已经不再需要了。

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


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