【问题标题】:Exception – Could not load file or assembly 'System.Web.Mvc, Version=4.0.0.1…'异常 - 无法加载文件或程序集“System.Web.Mvc,版本=4.0.0.1…”
【发布时间】:2015-06-30 09:49:42
【问题描述】:

有一个问题——只有当我请求一个控制器时——我得到了异常:

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

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

【问题讨论】:

  • 这个controller和其他controllers有什么区别?
  • 没有区别!!!我不明白为什么!
  • @MilkaSalkova 有时 Windows 补丁更新可能会导致此类问题。您是否尝试在项目中使用 Nuget 更新 MVC 框架,并检查服务器上安装了哪个 MVC 版本并尝试更新它?

标签: asp.net-mvc


【解决方案1】:

这是一个已知问题。似乎您最近已从 3.0 迁移到 4.0,或者此应用程序是来自存储库的全新克隆。一个控制器可能没有恢复 nuget。我也遇到过这个问题。我得到了这个 msdn link 并浏览它有一个解决方案。以下是提到的步骤。

可以通过执行以下操作之一来解决该问题 解决方案:

  1. (首选)从 NuGet 库安装 Microsoft.AspNet.Mvc(这将在您的 web.config 中安装绑定重定向)。你可以做 这来自 NuGet 包管理器或 Visual 中的 NuGet 控制台 工作室:

    安装包 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

为所有引用 System.Web.Mvc dll 的项目安装 Nuget Package Microsoft.AspNet.Mvc希望这能解决您的问题

【讨论】:

  • 问题是控制器返回强类型视图和视图所在的类型 - 我使用 System.Web.Mvc 中的 Bind 属性 - 这就是问题
  • 这是我的问题。我提取了一个 SVN 项目的副本,经过测试(很好)。然后只是为了测试我使用“删除文件”设置发布。然后它开始爆炸。结果我所有的“本地复制”设置都是假的,当我在我的同事机器上查看副本时,它们都是真的。将它们设置为 True 然后重新发布使 DLL 就位并且它起作用了。谢谢!
【解决方案2】:

由于 ASP.Net 程序集解决了怪异问题,我在 VSO 代理上遇到了这个构建错误。我更改了一些构建配置,Visual Studio 将 MVC 项目的输出目录修改为 \bin\x86\Debug 或类似的东西。

这曾经困扰过我,我记得 ASP.Net 只想构建为 \bin

因此,当您在构建时遇到任何类型的“找不到引用”时,请记住检查您的构建输出目录是否只有 \bin

更多关于这里的问题: Changing output directory for asp.net project in Visual Studio

希望这对某人有所帮助。

【讨论】:

    【解决方案3】:

    您也许可以引用 ASP.NET MVC 作为对 GAC 的引用,但可能会发生不同的开发人员安装了不同版本的 MVC。

    删除对 ASP:NET MVC 的引用,并将 ASP.NET MVC 添加为 nuget 包。

    【讨论】:

      【解决方案4】:

      转到 Nuget 管理器,搜索:“Microsoft.AspNet.Mvc”,然后按更新按钮。

      这适用于我的情况。

      【讨论】:

        【解决方案5】:

        我也在运行时得到了这个,这是由于我的项目(一个使用 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>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-09-20
          • 2012-02-12
          • 2013-01-19
          • 2013-05-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多