Visual Studio 2015 MVC剃须刀HTMLHelper intellisense不适用于升级后的项目

时间:2017-03-11 15:00:59

标签: asp.net-mvc razor intellisense

我一直在使用Visual Studio 2015一年多没有问题。最初在VS 2010上开发并升级到VS 2015的MVC.net项目之一在视图中的所有HTML帮助程序上都有红色错误行。一切仍然编译并运行良好,只有有限的智能感知和大量的错误,当你打开一个视图时会显示。

我注意到的一件事是HTML帮助程序使用的命名空间与我的其他工作项目不同。

例如,如果我将鼠标悬停在Html.BeginForm上,则Namespace会显示WebPage.HTML。在一个工作项目中,Html.BeginForm显示了WebViewPage。

我花了几个小时来查看旧帖子的所有建议,但还没有任何工作。

Razor Views not seeing System.Web.Mvc.HtmlHelper

Why don't my Html Helpers have intellisense?

因为所有内容都编译并且实际有效,我相信这个问题与VS工具或/views/web.config有关。我已经验证.proj文件中的工具设置为14,并且view / web.config中的所有引用都是正确的,但没有任何工作。当然,我已经清理并重建了解决方案的次数。我还从nuget完全安装了mvc.net并重新安装了几次。

这个项目中唯一奇怪的限制是我不能通过mvc 4升级它,因为项目中有几个其他依赖项与.net 4相关联。

这是我的view / web.config看起来像

的相关部分
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
  <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
  <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.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=3.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.Routing" />
  </namespaces>
</pages>
</system.web.webPages.razor>

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

这是我的web.config

中的相关部分
 <appSettings>
<add key="webpages:Version" value="1.0.0.0"/>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
 </appSettings>
  <system.web>
<httpRuntime maxRequestLength="1048576" executionTimeout="1500"/>
<customErrors mode="RemoteOnly"></customErrors>
<compilation debug="true" targetFramework="4.0">

  <assemblies>
    <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  </assemblies>
</compilation>

我从哪里开始?

1 个答案:

答案 0 :(得分:1)

我终于弄明白这一点,并认为我会发布这个以防其他人遇到这个噩梦。

这是一个非常古老的项目,已经通过许多版本的Visual Studio和.net进行了升级。它有一个_bin_deployableAssemblies与非常古老的MVC dll。这是一个VS 2010构造。即使我通过Nuget成功升级了MVC,这些旧的dll也被用作dll引用。

要解决此问题,我卸载了项目并手动删除了包含项目中_bin_deployableAssemblies文件夹的行。在这之后我的引用显示了我从Nuget多次安装的MVC版本的正确版本号。

剩下要做的就是通过web.config文件并手动将所有引用的dll的版本更改为适当的新版本。

干净并重建后,一切都恢复正常。