安装VS2012(包括MVC4)打破了现有的ASP.NET MVC 3应用程序

时间:2012-08-22 12:42:47

标签: .net asp.net-mvc-3 visual-studio

安装VS2012,特此是MVC 4后,我有一个MVC3应用程序现在因以下运行时错误而失败:

  

找不到方法:'System.Collections.Generic.Dictionary`2 System.Web.Razor.Parser.CSharpCodeParser.get_RazorKeywords()'。

如果我在VS2010中创建一个新的ASP.NET MVC 3项目,它可以使用razors视图。还有其他人遇到类似问题吗?

4 个答案:

答案 0 :(得分:26)

@Levi它位于项目根目录的Web.config中。

在我的web.config中,我注意到我已经注释掉了这个块,现在这个错误不再发生了:

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

答案 1 :(得分:9)

这是记录在案的行为。 VS2012安装MVC4。 请阅读链接中的“安装ASP.NET MVC 4打破ASP.NET MVC 3 RTM应用程序”一节 http://www.asp.net/whitepapers/mvc4-release-notes#_Toc303253815

错误的具体原因是ASP.NET MVC 3中的项目模板没有指定要使用哪个版本的Razor,因此默认情况下它会选择最新版本的Razor,即使MVC 3仅与之兼容Razor v1。

  • MVC 3仅与Razor v1兼容
  • MVC 4仅与Razor v2兼容

因此,如MVC4发行说明中所述,修复程序是将MVC 3应用程序的web.config文件更改为使用Razor v1。

所有新项目模板(包括MVC3)都将正确设置。只有较旧的应用程序没有此设置。

答案 2 :(得分:0)

我在Visual Studio 2015中使用 MVC 3 开发了一个旧项目。

出于某种原因,安装了 Razor v2 并且我遇到了OP所描述的错误:

  

找不到方法:'System.Collections.Generic.Dictionary`2 System.Web.Razor.Parser.CSharpCodeParser.get_RazorKeywords()'。

首先,我尝试了OP's answer,并在Web.Config中评论了几行。但它造成了这个错误:

  

无法加载文件或程序集'System.Web.WebPages.Razor,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一。定位的程序集的清单定义与程序集引用不匹配。

然后,我在这篇文章中看到了another answer关于MVC 3和Razor v2之间可能不兼容的问题。我只是在程序包管理器控制台中使用以下命令更新了 ASP.NET MVC

Update-Package Microsoft.AspNet.Mvc

......一切都恢复了!

答案 3 :(得分:0)

一般情况下VS2010后不支持Mvc3,我使用的是VS2010SP1顺便说一句。 你可以使它工作,但它最终会咬你。 所以我建议选择匹配的VS和MVC版本(查看官方微软网站的匹配)