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

Visual Studio在我的Asp.net MVC视图中不显示Linq扩展

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

    这让我感到困惑,我似乎无法让Visual Studio 2010在视图代码中识别System.Linq扩展方法。Intellisense无法工作,Visual Studio红色下划线表示无法识别的扩展方法。

    这些是web.config最相关的部分,我认为它们与Visual Studio相关,可以识别System.Linq扩展方法。注释掉的行可能未注释,但没有区别。

    <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">
        <namespaces>
            <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>
    

    我有一个类似这样的局部视图定义。同样的关于注释了两行。未注释没有区别:

    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IList<ToolbarItem>>" %>
    <%--
    <%@ Assembly Name="System.Core" %>
    <%@ Import Namespace="System.Linq" %>
    --%>
    <%
        if (!this.Model.Any(ti => ti is ToolbarText && (ti as ToolbarText).MaximizeWidth))
        {
            this.Model.Add(new ToolbarText { MaximizeWidth = true });
        }
    %>
    

    在这个特定的局部视图中 Any() 即使扩展方法定义在 System.Core 装配在 System.Linq 命名空间。

    我缺少哪些配置设置? 似乎Visual Studio看不到 系统核心 在中枚举其扩展方法的程序集 系统.Linq 命名空间。

    3 回复  |  直到 14 年前
        1
  •  5
  •   amurra    14 年前

    您需要将targetFramework的属性添加到web.config中的compilation元素:

    <system.web>
        <compilation debug="true" targetFramework="4.0">
    

    将其添加到web.config中,您应该在视图中重新获得intellisense。

        2
  •  1
  •   Manatherin    14 年前

    可以试试

    <%@ Import Namespace="*" %>
    

    其中*是要使用的命名空间,例如System.Linq

    可能不是最好的方法,但它可能工作(不在有vs-so-cant测试的计算机上)

        3
  •  1
  •   Robert Koritnik    14 年前

    当然 System.Core 程序集必须包含在配置编译中。

    但当我清理我的 web.config 文件我删除了这一部分,这对Visual Studio 2010来说是必要的(显然)使事情按预期工作。

    <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>