MVC Razor视图Intellisense在VS 2013/2015/2017中破发
我有一个现有的VS2010编写的项目,当在VS2010中加载完美。
当我在VS2013中加载这个相同的项目时,MVC Razor视图包含很多错误,就好像configuration文件从视图文件夹中丢失一样。
它似乎没有正确加载Razor编辑器使用来自根和视图文件夹的configuration文件,而是给我错误,如…
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?)
…
任何想法会造成这种情况?
编辑:configuration文件请求….
从主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 /”中configuration文件…
<?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>
我考虑编辑@ ChrisMoschini的post,但认为它是不同的。 我的问题是,我开始了一个新的MVC5应用程序,并盲目地从我想用作模板/起点的旧MVC3项目中复制了太多的web.config设置。 这样做会导致我在web.config中引用一些无效的版本。
为了解决这个问题,我创build了另一个新的MVC5项目,并确保我的不良项目中的以下configuration值与未修改的vanilla MVC5应用程序匹配。 再次,不要盲目复制这些版本号。 只要确保它们匹配您试图使用的版本的vanilla MVC应用程序
在根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>
在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>
我的几个项目几个月来都有这个问题。 我尝试了这么多的解决方法,没有任何工作。 这些问题似乎与项目有关:同一个项目在所有使用Visual Studio的PC上都会遇到Intellisense问题。 最后我通过这个post: http : //www.dennisonpro.info/managing-intellisense-in-razor-views-with-mvc-5-using-custom-builds-in-visual-studio-2013/
在我们的情况下,原因是所有这些项目的输出目录被更改为“bin”以外的项目。 通过将OutputPath更改回“bin \”(并清理项目,closures然后重新打开Visual Studio),我得到了Intellisense。
上面引用的post也提供了一个解决方法,以维持一个单独的输出目录,同时仍然具有Intellisense。
希望有一天能帮助别人。
MS表示,对于VS2013“razor(CSHTML和VBHTML)文件的Intellisense仅限于HTML标记”。
但是,如果在每个.cshtml中添加这两行,智能感知将在VS2013中再次用于MVC3:
@using System.Web.Mvc.Html @inherits System.Web.Mvc.WebViewPage<dynamic>
而不是dynamic
你可以把你的模型的types。
我最近自己解决了这个问题。 我从MVC4升级到MVC5(特别是5.1)。 升级到更新版本的MVC造成了这个破坏,我花了数小时试图解决它。 Web.Config
文件的一些小修改解决了intellisense问题!
你说这个项目在VS2010中有效,但不是在2013? 在这里看到这个答案。
我build议升级到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>
如果升级不是一个选项,那么恐怕你需要继续使用VS2010,如果你想要MVC3的智能感知支持。 不过,我强烈build议升级到MVC5。
我将MVC3项目升级到MVC5,并尽我所能避免微软build议的唯一真正的答案:
重新开始一个新的项目,并将结果转移到您现有的项目中。
这个过程是一个很浪费时间,似乎微软应该做一个真正的升级path可行,但我在这里告诉你,这里的问题是一个情感而不是技术:你确实需要创build一个新的MVC5项目,并将新的MVC5项目的结果replace为以下内容:
\Packages\* \Project\Project.csproj \Project\packages.config \Project\Web.Config \Project\Views\Web.Config \Project\Areas\*\Views\Web.Config
如果你不这样做,你只要绕着永恒的圈子去寻找那个正在吹起来的东西。 在我们的例子中,我将Web.Configs与新创build的Razor Intellisense-working MVC5项目完全相同,我运行了各种各样的升级工具,我可以find它们。 Intellisense拒绝工作。
在刚刚吹走.csproj和web.configs等之后,Intellisense神奇般地恢复了生机。 在双方的分歧中,我find的任何答案都不符合我所看到的。 Web.Configs几乎是相同的,不同的位应该是不相关的。 主要的变化实际上就是\ Packages \中的许多旧的Razor,MVC和WebPages DLL。 这可能是个诀窍,但是跳过这一点,并节省很多时间:只要创build一个新的MVC5项目并转储上面列出的文件。 这是唯一的理智的升级方法。
对于任何人可能偶然发现这一点,我没有find任何以前的答案,真正解决我的问题,或不涉及它。 无论如何,解决这个问题的方式,使intellisense再次工作是去我的bin文件夹,并删除所有的文件,然后清理/重build,它是固定的。
当我创build一个新的项目智能感知工作正常,但由于某种原因,它不适用于我们目前的项目。 我在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" />
这个问题已经解决了,但是我为未来的人添加了这个问题,因为以上都没有为我工作:
尝试以pipe理员身份运行Visual Studio。
不知何故,当我试图删除我的nuget软件包(其中包含所有必需的引用,如System.Web.Mvc,我被告知我需要来自MyPC \我的权限,可笑!(我是唯一的用户和唯一的pipe理… )在任何情况下,作为pipe理员运行,至less让我访问那些固定智能感知的文件。
下面的组合帮助我解决了这个问题:
- 创build一个新的MVC项目
- 比较现有和新项目的视图web.config文件中的版本
- 修正相应的版本(见下文)
- 删除bin文件夹中的所有文件
- 清洁解决scheme
- 最后重build解决scheme
<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> [...]
我一遍又一遍地这样; 我正在进行第三个新项目,这让我很生气。 我想我可能find了问题的原因。 我添加了文件,但没有将它们包含在Visual Studio中。 所以我现在select查看所有文件:
然后,对于我添加的所有文件夹,我都包含它们:
问题是,这似乎只是当你打开一个MVC网站作为一个项目,而不是当你打开它作为一个网站时出现。
我最终因为networking服务器崩溃而在我的电脑上出现了一堆其他问题,最终重新安装了visual studio。
这显然解决了这个问题…我不知道如何,但它确实。
我想知道,也许在我的情况下,这只是一个错误的安装,而不是典型的问题。
出于这个原因,我将这个标记为答案,但+1所有其他答复,因为他们可能是这个问题的良好答案。
但是,我发现,微软明确指出,Visual Studio 2013不支持低于4的MVC版本的智能感知,所以如果你使用MVC 3升级你的项目,如果你使用的是更新版本的MVC而没有其他的东西在这里工作尝试重新安装Visual Studio 。
另外值得注意的是… MVC现在是一个nuget包,所以不要从下载重新安装MVC允许VS为你解决这个问题。
在我的情况下,我把所有的视图从一个区域移动到根视图文件夹,所以我觉得VS对我的web.config的位置感到困惑。 我把它重命名为web.config,从web.config中,然后编辑configuration的内容(如更改剃刀主机工厂dll的版本号从5.2.2.0到5.2.3),但后来改变它背部。
然后,我走了大约30分钟,回来,重新启动VS,它是固定的!
在MVC 5中,如果您尝试通过在控制器,视图,模型等的区域和子文件夹下添加文件夹来添加区域,则不会有注册该区域的* AreaRegistration.cs文件或web.config在视图中,使VS能够理解您在视图中包含的剃刀元素。 结果是智能感知不能用于ViewBag之类的视图。 如果你在其他地方有这些文件的例子,你可以复制它们,并根据需要进行更新 – 或者你可以重新开始你的区域,通过右键点击区域并做一个添加区域来为你创build这些文件。
我已经改变了
<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" />
它的工作!
工具,库包pipe理器中使用包pipe理器控制台更新NuGet包
在命令行中.. PM> Update-Package
这将更新NuGet包并validationSystem.web.MVC的当前版本,并在Web.config文件下的Views文件夹中更新此版本。
<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>
closures解决scheme并重新打开。
希望这个作品!
我有这个问题六个月,只是意识到我需要将我的@model
指令移动到页面的顶部。 我以前有他们在代码块内。
我正在使用Visual Studio 2012.我尝试了以上所有,但最后通过安装解决了问题:
ASP.NET和Web Tools 2013.1: http : //blogs.msdn.com/b/webdev/archive/2013/11/18/announcing-release-of-asp-net-and-web-tools-2013-1-换视觉工作室2012.aspx
我遇到了类似的问题。 我有一个使用VS2015社区版创build的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=\"Web\" /optionInfer+" /> </compilers> </system.codedom>
尝试将System.Web.Mvc
引用的CopyLocal
属性设置为true
。 有时这对Intellisense有帮助。
我正在使用VS 2017专业版,而且我几乎对这篇文章的所有答案都尝试过了,还有那篇文章的答案,但是对我来说没有任何帮助。 昨天我更新VS,版本15.2 (26430.6) Release
,和intellisense回到我的cshtml文件!
我已经尝试了几乎所有的解决scheme,但没有得到智能感知,最后我find了一个解决scheme:
- 去解决scheme资源pipe理器
- 右键点击
.cshtml
文件或任何视图文件 - select“打开方式”选项,并将HTML编辑器(默认)设置为默认值
在从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>
- validationasp.net mvc中的下拉列表
- Visual Studio找不到自定义工具RazorGenerator
- 在ASP.Net MVC应用程序中设置文化
- 带有List <BaseClass>和编辑器模板的ViewModel
- 如何configurationELMAH以使用Windows Azure? 我在Elmah.axd上得到了一个404
- 为什么我不能在MVC控制器中使用System.IO.File方法?
- 什么时候应该创build一个新的DbContext()
- 当ASP.NET MVC中的file upload超过允许的大小时显示自定义错误页面
- 我可以通过Ajax.ActionLink中的OnSuccess事件传递参数吗?