代码之家  ›  专栏  ›  技术社区  ›  Robert Koritnik

Visual Studio 2010,Linq扩展方法和框架3.5

  •  1
  • Robert Koritnik  · 技术社区  · 14 年前

    <compilation targetFramework="4.0"> 在web.config中,Visual Studio 2010显示ASPX文件中的所有Linq扩展方法(而不是codebehinds)。但是当我将项目更改为目标3.5(它支持Linq扩展方法)时,Visual Studio会删除web.config中前面提到的属性,但是APSX文件中的Linq intellisense也会随之删除。

    在编辑ASPX文件时,是否可以说服Visual Studio 2010不要假设并返回到2.0,这样Linq扩展方法仍然会列在intellisense下拉列表中?

    编辑

    one of my previous questions ,当时我不知道发生了什么。

    问题再现

    1. 在Visual Studio 2010中打开Asp.net MVC项目属性和NetFx 3.5目标
    2. 正常开放 web.config 并移除 targetFramework
    3. 在视图本身(ASPX)中编写一些使用Linq扩展方法(即。 (new List<string>()).Any(s => string.IsNullOrEmpty()) ). 你应该看看 Any
    4. 开始在中逐个添加一个配置设置 web.config配置 任何 方法。
    5. 添加 <% @ Imports ... %> 任何 方法也一样。

    运行应用程序不是问题。它运行并执行 任何

    我的 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中的样子。在图像中你看不到多余的一行 <%@ Import Namespace="System.Linq" %> 应该就在那之后 <%@ Control ... %> ,但我试过有没有。 system.web/pages/namespaces 是全局设置。

    alt text

    3 回复  |  直到 7 年前
        1
  •  2
  •   Max Toro    14 年前

    .NET 4.0的根web.config具有 System.Linq 添加到 system.web/pages/namespaces . 对于.NET 3.5来说,情况并非如此,尽管它包含了Linq库,但由于向后兼容的原因,没有对根web.config进行更改,因此必须将其添加到 system.web/pages/namespace 在web.config中。

    ASP.NET Configuration File Hierarchy and Inheritance

        2
  •  2
  •   Ocelot20    14 年前

    我认为这是因为LINQ被认为包含在4.0框架中。对于旧版本,可以通过将其添加到顶部的每个ASPX页面来手动导入LINQ命名空间:

    <%@ Import Namespace="System.Linq" %>
    

    或者如果你不想在每个文件中都这样做,你可以 put it in your web.config .

        3
  •  0
  •   Robert Koritnik    14 年前

    包括 System.Core

    要使Visual Studio 2010中的一切都按预期工作(在framework 3.5下),必须添加 <system.codedom> web.config 也。这是丢失的部分:

    <system.codedom>
        <compilers>
            <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
                <providerOption name="CompilerVersion" value="v3.5"/>
                <providerOption name="WarnAsError" value="false"/>
            </compiler>
        </compilers>
    </system.codedom>