异常 - 无法加载文件或程序集“System.Web.Mvc,Version=4.0.0.1 ...”

16
问题在于当我请求单个控制器时,会出现异常:

无法加载文件或程序集 "System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。(HRESULT 异常:0x80131040)

这很奇怪,因为在我的配置文件中我看到版本是 4.0.0.0,并且所有其他控制器都正常,只有在我将应用程序上传到服务器时才会出现这种情况。

这个 控制器 和其他 控制器 有什么区别? - Christian Phillips
没有任何区别!!!我不明白为什么! - Tania Marinova
1
@MilkaSalkova 有时候Windows补丁更新可能会导致这种问题。您尝试使用Nuget更新项目中的MVC框架,并检查服务器上安装的MVC版本并尝试更新它吗? - Siva Gopal
5个回答

23

这是一个已知的问题。看起来您最近从3.0迁移到4.0,或者该应用程序是从存储库中克隆的。可能有单个控制器没有还原Nuget。我也遇到了这个问题。我找到了这个msdn 链接,浏览它并得到了解决方案。以下是提到的步骤。

可以通过实现以下解决方案之一来解决该问题:

  1. (首选) 从NuGet画廊安装Microsoft.AspNet.Mvc(这将在您的web.config中安装绑定重定向)。您可以从Visual Studio中的NuGet包管理器或NuGet控制台执行此操作:

    Install-Package Microsoft.AspNet.Mvc -Version -Project PROJECTNAME

    MVC 4版本:4.0.40804.0

    MVC 3版本:3.0.50813.1

  2. 手动更新对System.Web.MVC.dll的引用(不要使用GAC中的引用)。

    尝试“添加引用”->“程序集”->“扩展”对话框框。

在任何一种情况下,请确保程序集的“复制本地”项目属性设置为true,以便它最终出现在您的bin文件夹中,这对于部署是必需的。已知存在一个NuGet错误,会重置“复制本地”标志:https://nuget.codeplex.com/workitem/4344

安装Nuget包Microsoft.AspNet.Mvc以供所有引用System.Web.Mvc dll的项目使用。希望这能解决您的问题。


问题在于控制器返回强类型视图,而在生成视图的类型中,我使用的是 System.Web.Mvc 中的 Bind 属性,这就是问题所在。 - Tania Marinova
这是我的问题。我拉了一个SVN项目的副本,测试了一下(很好)。接着只是为了测试,我用“删除文件”设置发布了它。然后它开始出毛病了。结果发现所有的“拷贝本地”设置都是False,当我在我的同事的机器上查看时,它们都是True。将它们设置为True,然后重新发布就可以将DLL文件放到正确位置并且成功运行了。谢谢! - Gary Richter

1
我在VSO代理上遇到了这个构建错误,由于ASP.Net程序集解析的怪异性。我已经更改了一些构建配置,并且Visual Studio将MVC项目的输出目录修改为\bin\x86\Debug或类似的内容。
这之前曾经困扰过我,我记得ASP.Net只想要构建到\bin
因此,当您在构建时遇到任何“找不到引用”的问题时,请记得检查您的构建输出目录是否仅为\bin

enter image description here

这里有更多关于问题的信息: 在Visual Studio中更改ASP.NET项目的输出目录

希望这能帮助到某些人。


0
我也在运行时遇到了这个问题,原因是我的项目(一个使用 NuGet PackageReference 的单元测试项目)引用了一个已经存在必要绑定重定向的 ASP.NET 网站项目(在构建时由编译器警告建议)。我不得不在单元测试项目中添加相同的绑定重定向。
<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="System.Web.Mvc" culture="neutral" publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="0.0.0.0-5.2.6.0" newVersion="5.2.6.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

0

前往Nuget管理器,搜索:"Microsoft.AspNet.Mvc",然后点击更新按钮。

这在我的情况下有效。


0

你可以将ASP.NET MVC作为GAC的参考,但不同的开发者可能安装了不同版本的MVC。

移除对ASP.NET MVC的引用,并添加ASP.NET MVC作为NuGet包。


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