尝试引用较新版本的System.Web.WebPages.Razor的MVC4应用程序的问题

时间:2013-10-21 15:50:07

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor

过去几个月我一直在研究mvc4网络应用程序。直到星期五,当我在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

我已将一个dependentAssembly块添加到我的web.config版本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>

并确保我的views目录中的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 premium开发它。

有人有什么想法吗?

5 个答案:

答案 0 :(得分: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并将其应用于它缺少的所有项目。

答案 1 :(得分:3)

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

答案 2 :(得分:0)

对我而言,我所要做的就是将'特定版本'从False更改为True并开始工作。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

Wrong Razor dll

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

enter image description here