无法加载文件或程序集System.Web.Mvc

22

我在项目中使用umbraco 4.11.3。当我在Windows 7上从Visual Studio 2012运行项目时,它可以正常工作。但是,当我在Windows 8上从Visual Studio 2012运行项目时,它无法正常工作!

错误信息如下:

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

描述:在执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪以获取有关错误以及代码中的源位置的更多信息。

异常详细信息:

系统.IO.FileLoadException: 找不到文件或程序集“System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或其中一个依赖项。所定位的程序集清单定义与程序集引用不匹配。(HRESULT 的异常: 0x80131040)

源代码错误:

发生未处理的异常,当前Web请求的执行过程中生成。可以使用下面的异常堆栈跟踪来确定异常的起源和位置。 程序集加载跟踪:以下信息有助于确定为什么无法加载程序集“System.Web.Mvc,版本= 2.0.0.0,文化=中性,PublicKeyToken = 31bf3856ad364e35”。 === Pre-bind state information === LOG:用户= Jahan-PC \ jahan LOG:DisplayName = System.Web.Mvc,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35(完全指定)LOG:Appbase = file:///G:/20130204/SourceCode/Defraz.Movafaqiyat.WebApp/Defraz.Movafaqiyat.WebApp/LOG:Initial PrivatePath = G:\ 20130204 \ SourceCode \ Defraz.Movafaqiyat.WebApp \ Defraz.Movafaqiyat.WebApp \ bin 调用程序集:ClientDependency.Core.Mvc,Version = 1.5.1.0,Culture = neutral,PublicKeyToken = null。=== LOG:此绑定在默认加载上下文中开始。LOG:正在使用应用程序配置文件:G:\ 20130204 \ SourceCode \ Defraz.Movafaqiyat.WebApp \ Defraz.Movafaqiyat.WebApp \ web.config LOG:正在使用主机配置文件:C:\ Users \ jahan \ Documents \ IISExpress \ config \ aspnet.config LOG:使用机器配置文件: C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ config \ machine.config。LOG:后策略引用:System.Web.Mvc,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35 LOG:尝试下载新URL file:///C:/Users/jahan/AppData/Local/Temp/Temporary ASP.NET Files/root/bc5b37d0/42db0b24/System.Web.Mvc.DLL. LOG:尝试下载新URL file:///C:/Users/jahan/AppData/Local/Temp/Temporary ASP.NET Files/root/bc5b37d0/42db0b24/System.Web.Mvc/System.Web.Mvc.DLL。LOG:尝试下载新URL file:///G:/20130204/SourceCode/Defraz.Movafaqiyat.WebApp/Defraz.Movafaqiyat.WebApp/bin/System.Web.Mvc.DLL。WRN:比较程序集名称导致不匹配:主版本ERR:无法完成程序集安装(hr = 0x80131040)。探测终止。 堆栈跟踪:[FileLoadException: 无法加载文件或程序集'System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'或其某一个依赖项。所定位的程序集清单定义与程序集引用不匹配。(HRESULT 的异常:0x80131040)] ClientDependency.Core.Mvc.MvcFilter.ValidateCurrentHandler() +0 ClientDependency.Core.Module.ClientDependencyModule.b__0(IFilter f) +31 System.Linq.Enumerable.Any(IEnumerable`1 source, Func`2 predicate) +146 ClientDependency.Core.Module.ClientDependencyModule.ValidateCurrentHandler(IEnumerable`1 filters) +127 ClientDependency.Core.Module.ClientDependencyModule.HandleRequest(Object sender, EventArgs e) +179 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +136 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +69
注意:在Windows 7和Windows 8上,发布在IIS上的项目工作正常。我的项目不是基于ASP.NET MVC的。请帮我解决问题。

1
您的IIS Web服务器是否安装了.NET 2.0支持?如果是,则应用程序设置为使用正确的应用程序池吗?随着.NET 3.5支持的添加,您需要安装ASP.NET MVC框架。我建议按照1、2、3和4的顺序安装,以保持文件位置不变。 - Barkermn01
@MartinBarker 下载所有MVC版本并不是解决此问题的方法,因为这只会掩盖潜在的问题,并可能在该用户未来的项目中传播相同的问题。 - Digbyswift
1
@MartinBarker:非常感谢。我从http://www.microsoft.com/en-us/download/details.aspx?id=22079安装了ASP.NET MVC2在win8上,问题解决了。 - x19
@Jahan一点帮助都没有,这个程序集是发布的一部分,我很惊讶它解决了问题,可能是因为你的二进制文件在mvc2安装后被包含到GAC中。 - st35ly
我曾经遇到过这个问题,并发现这个问题的解决方案在这个链接中得到了确认:http://serverfault.com/questions/283818/iis-7-cant-run-asp-net-mvc-application-due-to-missing-system-web-helpers - Morten Jensen
4个回答

13
我们正在使用Azure云来运行部署,我遇到了相同的错误。由于您无法真正将软件包安装到服务器实例上,因此解决此问题的方法是进入项目引用,找到它抱怨缺失的库的引用,进入属性,然后设置复制本地为True。重新部署即可解决问题。

7
这个问题的正确解决方法是:
  1. 在你的 Solution Explorer 中右键点击 References,选择 Manage NuGet Packages
  2. 在左侧选择 Updates
  3. 在中间部分选择 Microsoft ASP.NET MVC
  4. 你会看到一个 Update 按钮出现在你的选择中,点击它

就这样...接受可能弹出的任何条款和条件,然后发布或在本地运行你的项目。如果你仍然遇到在本地运行你的项目时出现的问题,请尝试关闭 Visual Studio,删除该项目的 .SUO 文件,再尝试打开解决方案并重新运行。


1
这是一个非常好的简单易行的步骤,可以在我们深入挖掘和制造更多问题之前,捕捉到许多这样的问题。谢谢! - Alan

6
我假设这是一台新机器,因为你有新的操作系统和不同版本的Visual Studio。我认为你需要安装MVC Framework 2版本,因为这是你的Umbraco安装所期望的。你可以安装该框架并将DLL文件放入全局程序集缓存中,或者将DLL文件从好的系统复制到Web应用程序的bin文件夹中。
注意,你说你的项目“不使用”MVC,但我认为你会发现Umbraco确实使用它。无论如何,错误提示你的系统期望找到它。

非常感谢。我在Win8上从microsoft.com/en-us/download/details.aspx?id=22079安装了ASP.NET MVC2,我的问题得到了解决。 - x19

3

Umbraco 4.11.3不使用MVC2,而是使用MVC3,所以我猜想你在web.config文件中有一个关于MVC2库的引用,可能在compilation > assemblies部分。它应该像这样:

<compilation defaultLanguage="c#" batch="false" targetFramework="4.0" debug="true">
  <assemblies>
    <!-- ASP.NET 4.0 Assemblies -->
    <add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
    <add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
    <add assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
    <add assembly="System.Data.DataSetExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
    <add assembly="System.Web.Extensions.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  </assemblies>
  <!-- Added in Umbraco 4.6.2 -->
  <buildProviders>
    <add extension=".cshtml" type="umbraco.MacroEngines.RazorBuildProvider, umbraco.MacroEngines" />
    <add extension=".vbhtml" type="umbraco.MacroEngines.RazorBuildProvider, umbraco.MacroEngines" />
    <add extension=".razor" type="umbraco.MacroEngines.RazorBuildProvider, umbraco.MacroEngines" />
  </buildProviders>
  <!-- End of added in Umbraco 4.6.2 -->
</compilation>

在我的web.config文件中,在编译>程序集部分: <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> - x19
2
好的,但是你发布的错误确实指向了配置文件中对版本2的引用。你检查过web.config的其余部分了吗?很抱歉问一个显而易见的问题。 - Digbyswift
感谢您关注我的问题,但是Jonathan的解决方案非常完美。 - x19
Umbraco支持用户修改,因此,如果有一些需要MVC 2的自定义代码,则必须使用它,尽管在Umbraco中使用MVC 2是不好的自定义代码,但我以前也遇到过这个问题。 - Barkermn01

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