ASP.NET MVC 4项目 - Razor intellisense已经丢失

时间:2014-04-30 20:42:15

标签: asp.net-mvc visual-studio-2010 asp.net-mvc-4 razor

我最近将一个ASP.NET MVC项目从v3更新到了v4,现在我的.cshtml Razor视图在Visual Studio中编辑时丢失了智能感知。关键字和辅助属性(如@model,@ Url,@ Html等)无法识别,并且在VS中产生错误。运行时,应用程序本身运行正常。

我尝试过来自各种在线资源的建议解决方案,包括SO,其中大部分涉及对web.config的调整。我一直在他们身上,我很确定我的配置设置对于MVC 4是正确的:

<configuration>
    <configSections>
        <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>
</configSections>

<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
       <namespaces>
           <add namespace="System.Web.Mvc" />
           <add namespace="System.Web.Mvc.Ajax" />
           <add namespace="System.Web.Mvc.Html" />
           <add namespace="System.Web.Optimization"/>
           <add namespace="System.Web.Routing" />
       </namespaces>
    </pages>
 </system.web.webPages.razor>

<appSettings>
    <add key="webpages:Enabled" value="false" />
</appSettings>

<system.web>
    <httpHandlers>
        <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
    </httpHandlers>    
    <pages
    validateRequest="false"
    pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
    pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
    userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
        <controls>
            <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
        </controls>
    </pages>    
</system.web>

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />

    <handlers>
       <remove name="BlockViewHandler"/>
       <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
    </handlers>
</system.webServer>
</configuration>

现在,我已经做了一些观察,让我知道问题可能是什么。如果我通过我的web.config并恢复对MVC 3的引用,即MVC从版本4.0到3.0,以及Razor / WebPages从2.0到1.0,我的视图intellisense回来了(但显然这让我看到了一个无法运行的应用程序)。

我想我可能有安装问题,无论出于何种原因,Visual Studio都无法找到web.config中为Razor intellisense指定的程序集。我通过NuGet安装了ASP.NET MVC 4引用,并且我已经仔细检查了所有引用的程序集都是正确的版本。我已经尝试重新安装MVC软件包了,我已经多次尝试清理和重建了。

提前感谢任何有关如何使其正常运行的建议。这实际上阻碍了我的工作效率。

2 个答案:

答案 0 :(得分:0)

我认为您需要System.Web.Helpers命名空间,可能还需要System.Web.WebPages:

改变这个:

<namespaces>
  <add namespace="System.Web.Mvc" />
  <add namespace="System.Web.Mvc.Ajax" />
  <add namespace="System.Web.Mvc.Html" />
  <add namespace="System.Web.Optimization"/>
  <add namespace="System.Web.Routing" />
</namespaces>

为:

<namespaces>
  <add namespace="System.Web.Helpers" />
  <add namespace="System.Web.Mvc" />
  <add namespace="System.Web.Mvc.Ajax" />
  <add namespace="System.Web.Mvc.Html" />
  <add namespace="System.Web.Optimization"/>
  <add namespace="System.Web.Routing" />
  <add namespace="System.Web.WebPages" />
</namespaces>

答案 1 :(得分:0)

对我有用的解决方案(摘自http://www.asp.net/whitepapers/mvc4-release-notes的发行说明):

  • 在“解决方案资源管理器”中,右键单击项目名称,然后选择“卸载项目”。然后再次右键单击该名称并选择Edit ProjectName.csproj。
  • 找到ProjectTypeGuids元素,并将{E53F8FEA-EAE0-44A6-8774-FFD645390401}替换为{E3E379DF-F4C6-4180-9B81-6769533ABE47}。