无法加载文件或程序集'System.Web.Mvc, Version=3.0.0.0'或其依赖项之一。

24

我正在使用以下命令在MVC项目中添加Ninject:

Install-Package Ninject -version 3.0.1.10
Install-Package Ninject.Web.Common -version 3.0.0.7
Install-Package Ninject.MVC3 -Version 3.0.0.6

运行应用程序时,我遇到了这样的错误:

无法加载文件或程序集“System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或其某个依赖项。 所定位的程序集清单定义与程序集引用不匹配。(HRESULT 的异常:0x80131040)


你使用的 System.Web.Mvc 版本是什么? - Alexei Levenkov
你为什么要安装这么旧的版本?只需要安装最新版本的Ninject.MVC3,它会自动引入你需要的依赖项。 - Simon Whitehead
Simon,由于我对MVC不熟悉,所以我尝试遵循一些使用旧版本的教程。但是我尝试使用最新版本,输出结果仍然相同。 - Dani Petrick
在资源管理器中打开“bin”文件夹,右键单击 System.Web.Mvc - 详细信息选项卡将显示版本号。可能需要使用“程序集重定向”将旧版本映射到新版本(或反之亦然)。 - Alexei Levenkov
Alexei:版本号是5.0.11001.0。我尝试在web.config中重定向程序集,但错误仍然相同 :( - Dani Petrick
显示剩余3条评论
7个回答

17

更新应用程序的web.config文件。

请确保在应用程序的web.config文件中进行更改,而不是在Views文件夹中的web.config文件中进行更改。

 <runtime>
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
             <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
             <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
         </dependentAssembly>
      </assemblyBinding>
 </runtime>

2
我遇到了这个问题。我可能更新了MVC NuGet包,但版本不匹配。 - John B
没有被标记为答案,所以我不知道这是否回答了Dani的问题 - 但是回答了我的问题 :) 谢谢 - GDB

8
如果您正在遵循Pro ASP.NET MVC 5,请按照以下步骤解决问题:
  1. 在VS中的项目树中,右键单击References并转到Manage NuGet Packages
  2. 转到Onlinenuget.org并搜索ninject。
  3. 安装NinjectNinject.Web.CommonNinject.MVC5(书中建议安装MVC3)。
  4. 在步骤1中的Manage NuGet Packages菜单中,转到Updatesnuget.org
  5. 更新所有模块,特别是Microsoft ASP.NET MVC

3

我有一个使用Ninject的Microsoft ASP.NET Web API 2.2项目。

为了解决这个问题,我需要为我的项目安装NuGet包Microsoft ASP.NET MVC 4,因为Ninject需要System.Web.Mvc。这样做,Visual Studio会将System.Web.Mvc添加到项目的引用中。

此外,您应该将System.Web.Mvc引用的Copy Local属性设置为True,这样DLL文件就会被复制到Bin文件夹中。该DLL文件不是标准的.NET Framework组件,它是ASP.NET MVC包的一部分。


2
我扩展了引用,当我将鼠标悬停在 System.Web.Mvc 上时,我发现它的版本是 4.0.0.1。而且它的路径非常奇怪:C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies。我的 packages.config 显示相应的 nuget 包是 Microsoft.AspNet.Mvc.5.2.3。参考似乎是错误的。因此,我从项目中删除了该引用。然后使用以下命令卸载了 nuget 包。 uninstall-package Microsoft.AspNet.Mvc -force 请注意命令中的 force。
然后我通过以下命令重新安装它:
install-package Microsoft.AspNet.Mvc -version 5.2.3.0
现在我确保所引用的 dll 正确指向 nuget 版本:
D:\Vivek\Code1\Sept17\packages\Microsoft.AspNet.Mvc.5.2.3\lib\net45\System.Web.Mvc.dll
现在当我运行时,我发现 System.Web.Webpages.Razor(Microsoft.AspNet.WebPages nuget)和 System.Web.Razor(Microsoft.AspNet.Razor nuget)也出现了类似的问题。所以我也移除了它们并重新安装了相应的 nuget 包。
然后终于可以正常工作了。

1
如果amighty's Answer对你无效,请尝试这个。
<dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>

在长时间的错误烦恼后,这个解决方案终于出现了。


1
我曾经遇到过错误,不得不将“newVersion”更改为“5.0.0.0”才能使其正常工作。然后几个月后,在第100次重建之后,它突然停止了开发中的工作。这一次,我不得不将其改回“5.2.3.0”。 - Hugo Delsing

0

我在我的应用程序中遇到了这个问题。

在我的解决方案中,我们有一个Web应用程序项目和一个Web API项目。Web应用程序正在使用Web API。

我的问题的解决方法是,在Web应用程序中的Mvc dll版本与Web API项目中的版本不同。因此,每当我尝试访问Web API时,它都会抛出错误。我只需确保两个项目具有相同的Mvc dll版本,事情就开始正常工作了。您可以使用NuGet包管理器进行此操作。

只是提供给其他可能遇到类似情况的人参考。


0
在我的情况下,缺失的程序集已经作为项目的引用包含在内。我通过选择它并将其“复制本地”属性设置为True来解决了这个问题。我使用Visual Studio中的Web Deploy将我的项目“发布”到IIS。这一次,程序集被复制到网站的\bin文件夹中。

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