VS2015 - IntelliSense 在 class 库中的剃刀视图中不工作
VS2015 - IntelliSense not working in razor views in a class library
我很难描述确切的问题,但似乎是 "just" 仅在 razor (.cshtml) 视图中显示的 IntelliSense 问题。已经看了 2 天了,所以我真的需要一些帮助。
我正在使用 VS2015 Pro,使用标准模板启动了一个新的 Web MVC 应用程序 (WebApplication2)。在该应用程序中,一切正常。
现在我添加了一个 class 库项目(默认的,不是 "Package" 模板),并向其中添加了网页、MVC 和 razor nuget 包(如果相关的话) ).我在 class 库中创建新视图后,问题就变得明显了。似乎所有对系统库的引用在 cshtml 文件中都不可用。
在没有打开文件的情况下,我完全没有收到任何错误,但是当我打开视图时,所有系统 classes 下面都有红色的波浪线,并且错误列表(Build + IntelliSense)突然包含了很多错误系统* 库,示例:
The type or namespace name 'Mvc' does not exist in the namespace 'System.Web' (are you missing an assembly reference?)
这些包括 Linq 和 WebApplication2(测试项目),所以不仅仅是 System.Web。
我根据堆栈上的类似答案检查和完成的事情:
- Views 文件夹中的 web.config 包含正确的版本,还尝试从 Web 应用程序中复制一个。
- 重新安装了 nuget 包(Mvc、Razor、网页)。
- 重置用户数据并删除 .vs 文件夹。
- 程序集上的“复制本地”设置为 true。
我们发现这是我们较大的 Web 应用程序的实际情况,它在 VS2010 中运行良好,但后来我们决定升级到 2015 和 .Net 4.6。 class 库中的视图被标记为嵌入式资源并使用虚拟路径提供程序加载。上面的案例是一个超级简化的可重现项目,症状在我和我的2位同事的电脑上都是一样的。
如果我遗漏了关键信息,请直接提问。
图像可视化问题
Stephen Muecke 评论的文章中的回复让我开始了正确的方向。解决方案可能是我对哪个配置需要在哪里感到困惑,以及感觉像是某种解决方法的混合......
将 class 库项目的 [输出路径] 设置为 [bin/]。 Mohammad Chehab 在他的(目前离线?)博客 post 中提到了这一点,这篇文章中引用了这篇文章:http://thetoeb.de/2014/01/05/enabling-mvc5-intellisense-in-a-classlibrary-project/
在您的 [ClassLibrary/Views] 文件夹中,您应该有一个 Web.config,其中包含正确的剃须刀版本和命名空间。我刚刚从我们的工作 Web 应用程序项目和 added/changed 一些名称空间中复制了 Web.config 的内容。下面的示例。
在您的 [ClassLibrary] 根文件夹中,您应该更改 App.config 以便它也包含带有编译设置的 system.web 部分。下面的示例。
将这些更改为干净后,关闭解决方案,删除 bin 文件夹,打开解决方案,对我来说,它终于再次起作用了。
我确实遇到 System.Web.Mvc.xml 被锁定的零星问题,这可能是 MS 没有预见到的输出路径更改的副作用或其他原因......也许没什么好担心的。
希望有一天这能帮助一些可怜的谷歌搜索灵魂。
Project/Views/Web.config
<?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.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.webServer>
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer>
<system.web>
<compilation>
<assemblies>
<add assembly="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
</compilation>
</system.web>
</configuration>
Project/App.config
<?xml version="1.0" encoding="utf-8"?>
<!--
For more information on how to configure your ASP.NET application, please visit
http://go.microsoft.com/fwlink/?LinkId=301880
-->
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.6" />
</system.web>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
<bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
我很难描述确切的问题,但似乎是 "just" 仅在 razor (.cshtml) 视图中显示的 IntelliSense 问题。已经看了 2 天了,所以我真的需要一些帮助。
我正在使用 VS2015 Pro,使用标准模板启动了一个新的 Web MVC 应用程序 (WebApplication2)。在该应用程序中,一切正常。
现在我添加了一个 class 库项目(默认的,不是 "Package" 模板),并向其中添加了网页、MVC 和 razor nuget 包(如果相关的话) ).我在 class 库中创建新视图后,问题就变得明显了。似乎所有对系统库的引用在 cshtml 文件中都不可用。 在没有打开文件的情况下,我完全没有收到任何错误,但是当我打开视图时,所有系统 classes 下面都有红色的波浪线,并且错误列表(Build + IntelliSense)突然包含了很多错误系统* 库,示例:
The type or namespace name 'Mvc' does not exist in the namespace 'System.Web' (are you missing an assembly reference?)
这些包括 Linq 和 WebApplication2(测试项目),所以不仅仅是 System.Web。
我根据堆栈上的类似答案检查和完成的事情:
- Views 文件夹中的 web.config 包含正确的版本,还尝试从 Web 应用程序中复制一个。
- 重新安装了 nuget 包(Mvc、Razor、网页)。
- 重置用户数据并删除 .vs 文件夹。
- 程序集上的“复制本地”设置为 true。
我们发现这是我们较大的 Web 应用程序的实际情况,它在 VS2010 中运行良好,但后来我们决定升级到 2015 和 .Net 4.6。 class 库中的视图被标记为嵌入式资源并使用虚拟路径提供程序加载。上面的案例是一个超级简化的可重现项目,症状在我和我的2位同事的电脑上都是一样的。
如果我遗漏了关键信息,请直接提问。
图像可视化问题
Stephen Muecke 评论的文章中的回复让我开始了正确的方向。解决方案可能是我对哪个配置需要在哪里感到困惑,以及感觉像是某种解决方法的混合......
将 class 库项目的 [输出路径] 设置为 [bin/]。 Mohammad Chehab 在他的(目前离线?)博客 post 中提到了这一点,这篇文章中引用了这篇文章:http://thetoeb.de/2014/01/05/enabling-mvc5-intellisense-in-a-classlibrary-project/
在您的 [ClassLibrary/Views] 文件夹中,您应该有一个 Web.config,其中包含正确的剃须刀版本和命名空间。我刚刚从我们的工作 Web 应用程序项目和 added/changed 一些名称空间中复制了 Web.config 的内容。下面的示例。
在您的 [ClassLibrary] 根文件夹中,您应该更改 App.config 以便它也包含带有编译设置的 system.web 部分。下面的示例。
将这些更改为干净后,关闭解决方案,删除 bin 文件夹,打开解决方案,对我来说,它终于再次起作用了。 我确实遇到 System.Web.Mvc.xml 被锁定的零星问题,这可能是 MS 没有预见到的输出路径更改的副作用或其他原因......也许没什么好担心的。
希望有一天这能帮助一些可怜的谷歌搜索灵魂。
Project/Views/Web.config
<?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.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.webServer>
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer>
<system.web>
<compilation>
<assemblies>
<add assembly="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
</compilation>
</system.web>
</configuration>
Project/App.config
<?xml version="1.0" encoding="utf-8"?>
<!--
For more information on how to configure your ASP.NET application, please visit
http://go.microsoft.com/fwlink/?LinkId=301880
-->
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.6" />
</system.web>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
<bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>