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

时间:2015-05-22 09:35:51

标签: 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>

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

我尝试过的事情:

  • 将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和object文件夹(与上述相结合)并不能解决问题。

  • 从Nuget安装Asp.NET Web Helpers Library并不能解决问题。

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

我还能尝试什么?

1 个答案:

答案 0 :(得分:2)

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

System.Web.WebPages.Razor, Version=3.0.0.0
System.Web.Mvc, Version=5.2.3.0

程序集绑定重定向表示您使用的是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

这是我在views文件夹中的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>