asp.net mvc MVC Razor在VS 2013/2015/2017中查看了Intellisense




asp.net-mvc visual-studio (18)

我有一个用VS2010编写的现有项目,在VS2010中加载时效果很好。

当我在VS2013中加载同一个项目时,MVC Razor视图包含大量错误,就好像views文件夹中缺少配置文件一样。

它似乎没有使用root和views文件夹中的配置文件正确加载Razor编辑器,而是给我一些错误,如...

The name 'model' does not exist in the current context

和......

'System.Web.WebPages.Html.HtmlHelper' does not contain a definition for 'LabelFor' 
and no extension method 'LabelFor' accepting a first argument of type 
'System.Web.WebPages.Html.HtmlHelper' could be found 
(are you missing a using directive or an assembly reference?)

...

知道是什么会导致这个吗?

编辑:按要求配置文件....

从主web.config文件(不是全部,因为它太大而不能发布)

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="Ninject" culture="neutral" publicKeyToken="c7192dc5380945e7" />
            <bindingRedirect newVersion="3.0.0.0" oldVersion="0.0.0.0-3.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="Microsoft.Practices.EnterpriseLibrary.Validation" culture="neutral" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect newVersion="5.0.505.0" oldVersion="0.0.0.0-5.0.505.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="System.Web" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="Microsoft.Practices.ServiceLocation" publicKeyToken="31bf3856ad364e35" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-1.2.0.0" newVersion="1.2.0.0" />
        </dependentAssembly>
    </assemblyBinding>
</runtime>

“〜/ Views /”中的配置文件...

<?xml version="1.0"?>  
<configuration>
    <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" />
                <add namespace="Emedia.Common.Mvc.Views.Helpers"/>
                <add namespace="Emedia.Common.Mvc.Views.Extensions"/>
        <add namespace="Emedia.Common.Utilities"/>
        <add namespace="Emedia.Common.Utilities.Extensions"/> 
        <add namespace="Emedia.Common.Mvc.Controllers.Helpers"/>
                <add namespace="Emedia.Resources.Service"/>
        <add namespace="Emedia.Subscriber.Controllers"/>
        <add namespace="Emedia.Subscriber.Controllers.ViewModels"/>
            </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=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
            pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
            userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
            <controls>
                <add assembly="System.Web.Mvc, Version=3.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>


对于任何可能偶然发现这一点的人,我没有找到任何以前的答案来真正解决我的问题或与之无关。 无论如何,为我解决这个问题并使intellisense再次工作的方法是转到我的bin文件夹并删除那里的所有文件,然后清理/重建并修复它。


我已经尝试了几乎所有的解决方案,但没有得到intellisense,最后我找到了一个解决方案:

  1. 转到Solution Explorer
  2. 右键单击.cshtml文件或任何视图文件
  3. 选择“打开方式”选项并将HTML编辑器(默认)设置为默认值

我遇到了类似的问题。 我有一个使用VS2015社区版创建的MVC 5项目,我需要使用VS2013 Ultimate。 从根web.config文件中删除以下<system.codedom></system.codedom>块是最终允许IntelliSense在VS2013上的Razor视图中再次工作的原因。

<system.codedom>
  <compilers>
    <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
    <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
  </compilers>
</system.codedom>

我最终在我的电脑上遇到了一堆其他问题,因为网络服务器崩溃并最终重新安装了visual studio。

这显然解决了这个问题......我不知道它是怎么做的。

我想知道在我的情况下是否只是一个错误的安装而不是典型的问题。

出于这个原因,我将此标记为答案,但+1所有其他答复,因为它们可能是这个问题的良好答案。

然而,我确实发现微软明确表示Visual Studio 2013不支持低于4的MVC版本的智能感知,所以如果你使用MVC 3升级你的项目,如果你使用的是更新版本的MVC而且其他任何工作都没有尝试重新安装visual studio 。

另外值得一提的是...... MVC现在是一个nuget包,所以不要从下载redist中安装MVC让VS为你解决这个问题。


这个问题已经解决了,但是我为未来的人添加了这个问题,因为以上都没有为我工作:

尝试以管理员身份运行Visual Studio。

不知怎的,当我试图删除我的nuget包(包含所有必需的引用,如System.Web.Mvc,我被告知我需要MyPC \ Me的许可。荒谬!(我是唯一的用户,只有管理员... )无论如何,以管理员身份运行至少让我访问那些修复了intellisense的文件。


我改变了

<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc,
 Version=5.2.0.0, Culture=neutral, PublicKeyToken=123JHJF56AD364E35" />

对此:

<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc,
 Version=5.0.0.0, Culture=neutral, PublicKeyToken=123JHJF56AD364E35" />

它奏效了!


我的一些项目在几个月内遇到了这个问题。 我尝试了很多变通办法,没有任何效果。 问题似乎与项目有关:同一个项目将在所有使用Visual Studio的PC上出现Intellisense问题。 最后我发表了这篇文章: http://www.dennisonpro.info/managing-intellisense-in-razor-views-with-mvc-5-using-custom-builds-in-visual-studio-2013/http://www.dennisonpro.info/managing-intellisense-in-razor-views-with-mvc-5-using-custom-builds-in-visual-studio-2013/

在我们的例子中,原因是所有这些项目的输出目录被更改为“bin”以外的其他项目。 通过将OutputPath更改回“bin”(并清理项目,关闭然后重新打开Visual Studio),我得到了Intellisense。

上面引用的帖子还提供了一种解决方法,以便在仍具有Intellisense的同时维护单独的输出目录。

希望有一天能帮助某人。


MS表示,对于VS2013,“用于Razor的Intellisense(CSHTML和VBHTML)文件仅限于HTML标记。”

但是如果你在每个.cshtml中添加这两行,intellisense将再次用于VS2013中的MVC3:

@using System.Web.Mvc.Html
@inherits System.Web.Mvc.WebViewPage<dynamic>

而不是dynamic你可以把你的模型的类型。


使用Tool,Library包管理器中的Package Manager控制台更新NuGet包。

在命令行中.. PM> Update-Package这将更新NuGet包并验证当前版本的System.web.MVC并在Views文件夹下的web.config文件中更新此版本。

<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" />
        <add namespace="System.Web.Webpages"/>
      </namespaces>
    </pages>
  </system.web.webPages.razor>

关闭解决方案并重新打开。

希望这个有用!!!


以下组合有助于我解决问题:

  • 创建一个新的MVC项目
  • 比较现有项目和新项目的视图web.config文件中的版本
  • 相应修复版本(见下文)
  • 删除bin文件夹中的所有文件
  • 清洁解决方案
  • 最后重建解决方案
<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:Version" value="3.0.0.0"/>
    <add key="webpages:Enabled" value="false" />
  </appSettings>
  [...]


我正在使用VS 2017专业版,我在这篇文章中尝试了几乎所有的答案,以及那篇文章的答案,但没有任何对我有用。 昨天我更新了VS,版本15.2 (26430.6) Release ,并且intellisense回到了我的cshtml文件中!


我一遍又一遍地这样做了; 我正在进行第三个新项目,这让我很生气! 我想我可能已经找到了问题的原因。 我添加了文件,但没有将它们包含在Visual Studio中。 所以我现在选择查看所有文件:

然后,对于我添加的所有文件夹,我将其包括在内:

问题是,当您将MVC网站作为项目打开时,这似乎只会出现,而不是当您将其作为网站打开时。


在从MVC 3升级到5时,我发现在我的根目录Web.config中appSettings关键webpages:version设置为2.0.0.0 。 将此更改为3.0.0.0解决了此问题。

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


在MVC 5中,如果您尝试通过在控制器,视图,模型等的区域和子文件夹下添加文件夹来添加区域,则您将没有注册该区域的* AreaRegistration.cs文件或web.config在视图中,使VS能够理解您在视图中包含的剃刀元素。 结果是intellisense在ViewBag等视图中不起作用。 如果您在其他区域中有这些文件的工作示例,您可以将它们复制并适当更新 - 或者您可以通过右键单击区域并执行添加区域来重新开始区域,这将为您创建这些文件。


尝试将System.Web.Mvc引用的CopyLocal属性设置为true 。 有时这对Intellisense有帮助。


我最近自己解决了这个问题。 我从MVC4升级到MVC5(特别是5.1)。 升级到更新版本的MVC导致了这种破坏,我花了几个小时试图解决它。 Web.Config文件的微小更改修复了intellisense问题!

你说这个项目在VS2010有效,但不是2013年吗? here看到这个答案。

我建议升级到MVC5 。 这并不痛苦,升级应该是非常无缝的。

如果升级到MVC5并且仍然没有获得智能感知,则需要手动更新Web.Config文件,因为升级可能无法正确执行此操作!

这是/ Views文件夹中Web.conifg的修改版本,应该反映MVC5的更改。

<?xml version="1.0"?>  
<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.1.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" />
            <add namespace="Emedia.Common.Mvc.Views.Helpers"/>
            <add namespace="Emedia.Common.Mvc.Views.Extensions"/>
    <add namespace="Emedia.Common.Utilities"/>
    <add namespace="Emedia.Common.Utilities.Extensions"/> 
    <add namespace="Emedia.Common.Mvc.Controllers.Helpers"/>
            <add namespace="Emedia.Resources.Service"/>
    <add namespace="Emedia.Subscriber.Controllers"/>
    <add namespace="Emedia.Subscriber.Controllers.ViewModels"/>
        </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=5.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
        <controls>
            <add assembly="System.Web.Mvc, Version=5.1.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>

如果升级不是一个选项,那么如果你想要对MVC3进行智能感知支持,我担心你需要继续使用VS2010。 但是,我强烈建议升级到MVC5。


当我创建一个新项目时,intellisense工作正常,但由于某种原因它在我们当前的项目中不起作用。 我在Views/Web.config文件中找到的唯一区别是我们的MVC版本为5.2.0.0,而新项目的版本为5.0.0.0。 对我们有用的是改变这个:

<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc,
     Version=5.0.0.0, Culture=neutral, PublicKeyToken=123JHJF56AD364E35" />

对此:

<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc,
     Version=5.2.0.0, Culture=neutral, PublicKeyToken=123JHJF56AD364E35" />




intellisense