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

C# MVC4应用程序尝试引用较新版本的System.Web.WebPages.Razor时出现问题,c#,asp.net,asp.net-mvc,asp.net-mvc-4,razor,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Razor,在过去的几个月里,我一直在开发一个mvc4 web应用程序。直到周五,我在nuget中运行了一个更新包,以确保我拥有最新版本的库,一切都很顺利 现在,当我试图查看应用程序中的任何内容时,它会告诉我它得到了错误 无法加载文件或程序集'System.Web.WebPages.Razor,Version=3.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35'或其依赖项之一。定位的程序集清单定义与程序集引用不匹配。(HRESULT的例外:0x80

在过去的几个月里,我一直在开发一个mvc4 web应用程序。直到周五,我在nuget中运行了一个更新包,以确保我拥有最新版本的库,一切都很顺利

现在,当我试图查看应用程序中的任何内容时,它会告诉我它得到了错误
无法加载文件或程序集'System.Web.WebPages.Razor,Version=3.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35'或其依赖项之一。定位的程序集清单定义与程序集引用不匹配。(HRESULT的例外:0x8013100)

我已经检查了我的web.config和packages.config,我没有引用任何地方
System.web.WebPages.Razor,Version=3.0.0.0

我已将dependentAssembly块添加到版本为2.0.0.0的web.config中

<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 framework

我已经在服务器上和本地测试过了,得到了相同的错误消息

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

我正在Visual Studio 2012 premium中开发它

有人有什么想法吗

我已经检查了我的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的新版本,并将其应用于所有缺少它的项目。

我也遇到了同样的问题,我的WCF服务不起作用。解决方案是从我的BIN文件夹中删除System.Web.Mvc.dll。

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

我也遇到了同样的问题,除了在执行Chris Pratt的回答中描述的步骤时,System.Web.Websites.Razor仍然显示版本2.0.0.0,尽管我刚刚经历了通过NuGet将其更新为3.0.0.0的过程


最终为我解决的是卸载带有NuGet的MVC软件包并再次安装它(从而重新安装它的依赖项:System.Web.Webs和System.Web.Razor)

右键单击程序集(在引用中)并在其内容菜单上选择“属性”,以在Visual Studio的“属性”选项卡上查看其属性。在其下查找复制本地属性并确保其设置为True。

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

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


您的一个NuGet软件包可能正在引用它。您的目标是framework 4.0还是framework 4.5?如果您的项目是4.0,而更新后的软件包使用4.5,那么您有两个选择:降级nuget或将框架升级到4.5我的目标是4.5。我已回滚到上一个变更集,所有内容都再次正常工作。但是我现在害怕更新我的依赖项。我只是在我的项目的一个单独的实例中尝试了这个方法,以确保它能够工作,并且解决了我的问题。谢谢你设置这个是为了什么dll?我发布这个答案已经有一段时间了,但我很确定它是System.Web.WebPages.Razor