Visual Studio使用MVC5和Razor突出显示.cshtml页面中不存在的错误

Bob*_*way 6 c# asp.net-mvc razor

此问题之前已被问过数百次,但所提出的解决方案似乎都没有效果.

我正在Visual Studio 2013中构建一个MVC5项目.它运行正常.但是,在VS中的所有.cshtml页面中,所有内联Razor代码都用红色下划线,好像这是一个错误.@modelViewBag声明它们在当前背景下不存在.Html.ActionLink声明它不包含ActionLink的定义.不同对象上还有其他错误,并且智能感知被破坏.

构建项目时也会显示这些错误.奇怪的是,我们已经在TFS上进行了一次门禁登记,并且它的构建就好了.

MVC和Razor通过NuGet安装.Nuget告诉我,MBC的版本是5.2.3,安装的Razor版本是3.2.3.

Views文件夹中有一个web.config文件,它看起来像这样:

  <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.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=5.2.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" />
        <add namespace="MyProjectNamespace" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

  <appSettings>
    <add key="webpages:Enabled" value="false" />
  </appSettings>
Run Code Online (Sandbox Code Playgroud)

主web.config文件中包含以下部分:

<dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
  </dependentAssembly>
Run Code Online (Sandbox Code Playgroud)

我尝试过的事情:

  • 将System.Web.Mvc.MvcWebRazorHostFactory的版本更新为5.2.3无法解决问题.

  • 将主web.config中的System.Web.Mvc版本更改为5.2.0不能解决问题.

  • 将sectionGroup中为razor指定的版本更新为3.2.3会破坏应用程序.

  • 更改网页的值:在视图中的web.config文件中启用为true,主web.config不能解决问题.

  • 删除.suo文件,或bin和对象文件夹(与上述相结合)无法解决问题.

  • 从Nuget安装Asp.NET Web Helpers Library无法解决问题.

  • 将一个system.web部分添加到Views\web.Config,其中包含键入MVC版本5.2.3的页面和控件的值不能解决问题.

我还能尝试什么呢?

Mic*_*inn 2

尝试更改 Views 文件夹中的 web.config 以使用这些版本:

System.Web.WebPages.Razor, Version=3.0.0.0
System.Web.Mvc, Version=5.2.3.0
Run Code Online (Sandbox Code Playgroud)

程序集绑定重定向表明您使用的是 Mvc 版本 5.2.3,而不是 5.2.0

我刚刚遇到了类似的问题并且解决了它。我使用的是截至 2015 年 5 月 29 日的 NuGet 最新版本,并且刚刚从 MVC3 升级。

Razor NuGet 包是 Microsoft.AspNet.Razor.3.2.3,但二进制文件使用此名称:System.Web.WebPages.Razor、Version=3.0.0.0、Culture=neutral、PublicKeyToken=31bf3856ad364e35

这是视图文件夹中的 web.config:

<configuration>
  <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.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=5.2.3.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>

    <!--
        Enabling request validation in view pages would cause validation to occur
        after the input has already been processed by the controller. By default
        MVC performs request validation before a controller processes the input.
        To change this behavior apply the ValidateInputAttribute to a
        controller or action.
    -->
    <pages
        validateRequest="false"
        pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <controls>
        <add assembly="System.Web.Mvc, Version=5.2.3.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>
Run Code Online (Sandbox Code Playgroud)