【发布时间】:2011-05-08 16:16:21
【问题描述】:
如果我在 web.config 中设置 <compilation targetFramework="4.0">,Visual Studio 2010 会在 ASPX 文件(不是代码隐藏)中显示所有 Linq 扩展方法。但是当我将项目更改为目标 3.5(支持 Linq 扩展方法)时,Visual Studio 会删除 web.config 中前面提到的属性,但 APSX 文件中的 Linq intellisense 也会随之而来。
问题
是否可以说服 Visual Studio 2010 在编辑 ASPX 文件时不要假设并退回到 2.0,因此 Linq 扩展方法仍会列在智能感知下拉列表中?
编辑
正如我在 one of my previous questions 中指出的那样,当我不知道发生了什么时,手动添加程序集和导入命名空间并不能解决问题。
问题再现
要重现此问题,请执行以下操作:
- 在 Visual Studio 2010 中打开 Asp.net MVC 项目属性和目标 NetFx 3.5
- 打开
web.config并删除targetFramework属性(如果它仍然存在)。 - 在使用 Linq 扩展方法的视图本身 (ASPX) 中编写一些代码(即
(new List<string>()).Any(s => string.IsNullOrEmpty()))。您应该会看到Any无法被 Visual Studio 2010 识别。 - 开始在
web.config中添加一项配置设置。Any方法应该没有区别。 - 将
<% @ Imports ... %>添加到视图中。Any方法也应该没有区别。
运行应用程序不是问题。它运行并且还执行AnyLinq 扩展方法。没问题。设计时支持是这里的问题。
我的web.config 文件
这是我的 web.config 文件的完整内容,它没有达到预期的效果(我也可以包含注释掉的部分,但这没有任何区别 - 原始 Asp.net MVC 2 项目模板没有'也不包括这些):
<?xml version="1.0"?>
<configuration>
<system.web>
<httpHandlers>
<add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
<compilation debug="true" batch="true">
<assemblies>
<!--
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
-->
<add assembly="System.Web.Abstractions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
</compilation>
<pages enableViewState="false">
<controls>
<add tagPrefix="SharePoint" assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" namespace="Microsoft.SharePoint.WebControls" />
</controls>
<namespaces>
<add namespace="Microsoft.SharePoint"/>
<add namespace="System.Collections.Generic"/>
<add namespace="System.Linq"/>
<add namespace="System.Web.Mvc"/>
<add namespace="System.Web.Mvc.Html"/>
<add namespace="System.Web.Routing"/>
<add namespace="MyApp.Objects"/>
<add namespace="MyApp.Web.General"/>
<add namespace="MyApp.Web.Helpers"/>
</namespaces>
</pages>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="BlockDirectAccessHandler"/>
<add name="BlockDirectAccessHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer>
</configuration>
这是它在 Visual Studio 2010 中的样子。在图像中,您看不到应该紧跟在 <%@ Control ... %> 之后的额外行 <%@ Import Namespace="System.Linq" %>,但我已经尝试过使用和不使用。 system.web/pages/namespaces 无论如何都是全局设置。
【问题讨论】:
标签: linq visual-studio-2010 .net-3.5 intellisense