8

在过去的几个月里,我一直在开发一个 mvc4 Web 应用程序。直到星期五我在 nuget 中运行更新包以确保我拥有最新版本的库时,一切都运行良好。

现在,当我尝试查看应用程序中的任何内容时,它告诉我它得到了错误 Could not load file or assembly 'System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

我已经检查了我的 web.config 和 packages.config,但我没有参考System.Web.WebPages.Razor, Version=3.0.0.0

我在 web.config 中添加了一个dependentAssembly 块,版本为 2.0.0.0

<dependentAssembly>
    <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>

并确保我的视图目录中的 web.config 也指定了 v2.0.0.0

<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
  <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
  <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>

我还确保我的参考资料中引用的版本是 2.0.0.0。我试过删除它并阅读它。我已经尝试确保服务器安装了最新版本的 .net 框架。

我已经在服务器和本地对此进行了测试,并得到了相同的错误消息。

在本地,我在错误日志中看到了这一点,LOG: Post-policy reference: System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 但我找不到任何有关导致该问题的信息。

我正在 Visual Studio 2012 高级版中开发它。

有人有想法么?

4

6 回答 6

12

我检查了我的 web.config 和 packages.config,但我没有引用 System.Web.WebPages.Razor, Version=3.0.0.0

那是你的问题。我自己也遇到过几次类似的问题。但是,它往往主要发生在一个解决方案中处理多个项目时;我不确定这是否适用于您的情况。尽管如此,问题归结为实际项目引用已“升级”,但您的 web.config 和 packages.config没有引用该升级包。如果你进入你的项目引用并查看 Razor 引用的属性,我敢打赌,它上面写着 3.0.0.0。您可以通过浏览到较低版本包的 bin 目录来删除引用并重新添加它,或者完全升级它。

就像我说的,当您升级一个项目而不是另一个项目时,这通常发生在多项目解决方案中。修复它的最简单方法是管理整个解决方案的 nuget 包。然后,您可能会看到 Razor 的多个列表,其中一个被检查用于一个或多个项目,但不是一些,反之亦然。为旧版本删除旧版本的 Razor(取消选中关联项目)并应用。然后返回到新版本的 Razor 并将其应用到它缺少的所有项目中。

于 2013-10-21T19:24:41.743 回答
3

我遇到了同样的问题,我的 WCF 服务无法正常工作。解决方案是从我的 BIN 文件夹中删除 System.Web.Mvc.dll。

于 2014-02-22T19:21:55.893 回答
2

我遇到了同样的问题,除了在完成 Chris Pratt 的回答中描述的步骤时,System.Web.Websites.Razor 仍然显示版本 2.0.0.0,即使我刚刚完成了将其更新到 3.0.0.0 的过程通过 NuGet。

最终为我修复它的是使用 NuGet 卸载 MVC 包并再次安装它(从而重新安装它的依赖项:System.Web.Websites 和 System.Web.Razor)

于 2015-05-09T06:27:18.177 回答
0

对我来说,我所要做的就是将“特定版本”从 False 更改为 True,然后它就开始工作了。

于 2014-04-04T15:43:41.673 回答
0

右键单击程序集(在 References 中)并在其内容菜单上选择 Properties 以在 Visual Studio 的 Properties 选项卡上查看其属性。在其下查找 Copy Local 属性并确保其设置为 True。

于 2016-02-01T11:04:44.343 回答
0

检查 Web 应用程序 bin 目录中 System.Web.Razor.dll 文件的产品版本。下图显示了错误的版本 (2.0.20715.0):

错误的 Razor dll

下图显示了正确的版本 (3.0.11001.0):

在此处输入图像描述

于 2018-04-11T10:05:26.313 回答