与System.Web.Mvc版本冲突

10

现在我正在阅读《ASP.NET MVC 5, Freeman》这本书,并且我已经创建了3个项目:

  • SportsStore.Domain-逻辑
  • SportsStore.UnitTests-测试
  • SportsStore.WebUI-视图和控制器

使用NuGet命令行,我安装了许多包,就像书中所述:

Instal-Package Microsoft.Aspnet.Mvc-version 5.0.0.0-projectname SportsStore.Domain .. 等 ..

但我认为我安装了错误的东西,因为现在我有一个错误:

 

构建“SportsStore.WebUI,Version = 1.0.0.0,Culture = neutral,    PublicKeyToken = null”使用比程序集“System.Web.Mvc,Version = 5.0.0.0,Culture = neutral,    PublicKeyToken = 31bf3856ad364e35”更高版本的“System.Web.Mvc,Version = 5.2.2.0,    Culture = neutral,PublicKeyToken = 31bf3856ad364e35”,对其进行引用   c:\ Users \ Дима \ Documents \ Visual Studio   2013 \ Projects \ SportsStore \ SportsStore.WebUI \ bin \ SportsStore.WebUI.dll SportsStore.UnitTests

无法理解如何解决它。


3
请卸载领域包中的MVC包,然后使用版本标记为5.2.2.0 (-version 5.2.2.0)重新安装。 - thorkia
我添加了一个答案 - 如果它解决了你的问题,我会很感激你能将其标记为正确答案。 - thorkia
1
在这本书的同一个实验室也遇到了同样的问题。通过卸载 UnitTests 项目中的 Microsoft.Aspnet.Mvc 并重新安装 5.2.2.0 版本密钥来解决。 - Anton
7个回答

12

我自己遇到了这个完全相同的问题,决定将Microsoft.Aspnet.Mvc的版本更新为WebUI项目中定义的相同版本。这对我起了作用,我想分享一下。

所以在包管理器控制台中,我运行了以下命令:

Update-Package Microsoft.Aspnet.Mvc -version 5.2.3 -projectname SportsStore.Domain
Update-Package Microsoft.Aspnet.Mvc -version 5.2.3 -projectname SportsStore.UnitTests

注意: 此写作时我的版本为5.2.3。 您上面的声明是您的版本为5.2.2,因此请改用该版本。


在我的情况下,不同的项目引用了不同的版本。我必须更新所有项目以使用相同的版本。谢谢。 - Kishan Vaishnav

10

如果您知道如何阅读,构建中的错误消息会清楚地解释问题。

它首先告诉您WebUI项目使用了5.2.2.0:

SportsStore.WebUI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null use System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35

接着会告诉你,你的一个项目正在引用不同版本:

later version than the assembly System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35

根据你在问题中提到的,你在域项目中安装了5.0.0.0版本,因此你需要将该版本从项目中删除,并安装正确的版本(在这种情况下是5.2.2.0)


在我的情况下,这是因为我使用Nuget在我的主项目中下载了MVC5,但Tests项目是用默认的MVC4脚手架生成的。我只需在核心项目中将MVC5 DLLs的引用添加到Tests项目中即可。 - markau

3

您需要更新您的Microsoft Asp.NET MVC版本。操作步骤如下:

  1. 点击工具并选择“NuGet包管理器”
  2. 选择“管理NuGet包管理器控制台”
  3. 搜索 Microsoft Asp.NET MVC 并进行更新。
  4. 重新启动Visual Studio。

1
您也可以尝试用此部分替换web.config中的相应部分。不确定是否有效,但只需要两分钟即可尝试。
<dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.2.0" />
      </dependentAssembly>

1
通常情况下,当您升级/安装/卸载MVC包时,它会依赖于其他库,例如我遇到的问题是它依赖于不兼容MVC版本5.2.7的MvcSiteMapProvider。
以下是此类问题的解决方案:
1. 卸载依赖库(例如在我的情况下,我卸载了MvcSiteMapProvide) 2. 升级MVC版本,可以使用NuGet Package Manager或控制台。 3. 再次安装和卸载库(在我的情况下,我再次安装了MvcSiteMapProvider) 4. 删除Obj文件夹,清理并构建项目。

0
我曾经遇到过相同的问题,解决方法很简单,只需要点击Build►Clean Solution,这将清除bin文件夹中的一些文件,然后重新构建你的解决方案。这实际上修复了我的问题。

-1

前往偏好设置,找到 System.Web.Mvc 然后将其移除


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