繁体   English   中英

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

[英]Visual Studio highlights non-existant errors in .cshtml pages using MVC5 and 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文件中将webpages:Enabled的值更改为true,主web.config不能解决问题。

  • 删除.suo文件或bin和object文件夹(与上面的组合)不能解决问题。

  • 从Nuget安装Asp.NET Web帮助程序库不能解决问题。

  • 将System.web部分添加到Views \\ web.Config中,其中包含页面和控件的值,这些页面和控件的键为MVC 5.2.3版,则无法解决此问题。

我还能尝试什么呢?

尝试将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

我只是有一个类似的问题,并解决了它。 我正在使用截至15年5月29日的NuGet的最新版本,并且刚刚从MVC3升级。

Razor NuGet软件包是Microsoft.AspNet.Razor.3.2.3,但二进制文件使用的名称是:System.Web.WebPages.Razor,版本= 3.0.0.0,文化=中性,PublicKeyToken = 31bf3856ad364e35

这是我的web.config在views文件夹中:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM