War*_*War 47 asp.net-mvc intellisense visual-studio razor
我有一个用VS2010编写的现有项目,在VS2010中加载时效果很好.
当我在VS2013中加载同一个项目时,MVC Razor视图包含许多错误,就好像views文件夹中缺少配置文件一样.
它似乎没有使用root和views文件夹中的配置文件正确加载Razor编辑器,而是给我一些错误,如...
The name 'model' does not exist in the current context
Run Code Online (Sandbox Code Playgroud)
和......
'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?)
Run Code Online (Sandbox Code Playgroud)
...
知道是什么会导致这个吗?
编辑:按要求配置文件....
从主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>
Run Code Online (Sandbox Code Playgroud)
"〜/ 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>
Run Code Online (Sandbox Code Playgroud)
vig*_*ity 60
我考虑过编辑@ ChrisMoschini的帖子,但认为它已经不同了.我的问题是我启动了一个新的MVC5应用程序,并盲目地从我想用作模板/起点的旧MVC3项目中复制了太多的web.config设置.这样做导致我在web.config中引用了一些无效版本.
为了解决这个问题,我创建了另一个新的MVC5项目,并确保我的错误项目中的以下配置值与vanilla,未修改的MVC5应用程序相匹配.同样,不要盲目复制这些版本号.只需确保它们与您尝试开始工作的版本的vanilla MVC应用程序匹配
在root中web.config:
<appSettings>
...
<add key="webpages:Version" value="3.0.0.0"/>
...
</appSettings>
<system.web>
...
<compilation debug="true" targetFramework="4.5.1"/>
<httpRuntime targetFramework="4.5.1"/>
...
</system.web>
Run Code Online (Sandbox Code Playgroud)
在Views\Web.config:
<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>
<system.web.webPages.razor>
...
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
...
</system.web.webPages.razor>
Run Code Online (Sandbox Code Playgroud)
Jim*_*Jim 15
我的一些项目有几个月的问题.我尝试了很多变通办法,没有任何效果.问题似乎与项目有关:同一个项目将在所有使用Visual Studio的PC上出现Intellisense问题.最后我来看了这篇文章: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>
Run Code Online (Sandbox Code Playgroud)
而不是dynamic你可以把你的模型的类型.
我将MVC3项目升级到MVC5,并尽我所能避免Microsoft推荐的这个问题的唯一真正答案:
重新开始使用新项目,并将结果位移到现有项目中.
这个过程是一个很大的浪费时间,似乎微软应该让真正的升级路径可行,但我在这里告诉你这里的问题是一个情感的而不是技术问题:你真的需要创建一个新的MVC5项目,并将以下内容替换为新MVC5项目的结果:
\Packages\*
\Project\Project.csproj
\Project\packages.config
\Project\Web.Config
\Project\Views\Web.Config
\Project\Areas\*\Views\Web.Config
Run Code Online (Sandbox Code Playgroud)
如果你不这样做,你只会绕圈子寻找永恒的东西,试图找到一个令人兴奋的环境.在我们的例子中,我的Web.Configs与新创建的Razor Intellisense工作的MVC5项目完全相同,我运行了各种各样的升级工具,你可以找到它.Intellisense拒绝工作.
在吹掉.csproj和web.configs等之后,Intellisense神奇地恢复了生机.区分两面,我找到的任何答案都没有与我所看到的相匹配.Web.Configs几乎是相同的,不同的位应该是无关紧要的.主要的变化实际上是什么在\ Packages\ - 很多旧的Razor,MVC和WebPages dll都没了.这可能是诀窍,但跳过这个并省去了很多时间:只需创建一个新的MVC5项目并转储上面列出的文件.这是唯一理智的升级方法.
我最近自己解决了这个问题.我从MVC4升级到MVC5(特别是5.1).升级到更新版本的MVC导致了这种破坏,我花了几个小时试图解决它.Web.Config文件的微小更改修复了intellisense问题!
你说这个项目在VS2010上有效,但不是2013年吗?在这里看到这个答案.
我建议升级到MVC5.这并不痛苦,升级应该是非常无缝的.
如果您升级到MVC5并且仍未获得智能感知,则需要Web.Config手动更新文件,因为升级可能无法正确执行此操作!
这是您Web.conifg在/ Views文件夹中的修改版本,它应该反映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>
Run Code Online (Sandbox Code Playgroud)
如果升级不是一个选项,那么如果你想要对MVC3进行智能感知支持,我担心你需要继续使用VS2010.但是,我强烈建议升级到MVC5.
小智 5
对于任何可能偶然发现这一点的人,我没有找到任何以前的答案来真正解决我的问题或与之无关.无论如何,为我解决这个问题并让intellisense再次工作的方法是转到我的bin文件夹并删除那里的所有文件,然后清理/重建并修复它.
当我创建一个新项目时,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" />
Run Code Online (Sandbox Code Playgroud)
对此:
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc,
Version=5.2.0.0, Culture=neutral, PublicKeyToken=123JHJF56AD364E35" />
Run Code Online (Sandbox Code Playgroud)