【问题标题】:Visual Studio doesn't show Linq extensions in my Asp.net MVC viewsVisual Studio 在我的 Asp.net MVC 视图中不显示 Linq 扩展
【发布时间】:2011-05-08 09:34:38
【问题描述】:

这让我感到困惑,我似乎无法让 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.Linq 命名空间下的System.Core 程序集中定义的。

我缺少哪些配置设置? 似乎 Visual Studio 看不到 System.Core 程序集来枚举它在 System.Linq 命名空间中的扩展方法。

【问题讨论】:

  • this.Model是什么类型的?
  • @Jackson:开玩笑?您可以在 定义中看到...它的类型为IList&lt;ToolbarItem&gt;
  • 不是在开玩笑 - 不习惯 ASP.Net-MVC / ASP.Net。

标签: asp.net-mvc visual-studio-2010 configuration linq-extensions


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    将其添加到您的 web.config 中,您应该会在视图中重新获得智能感知。

    【讨论】:

    • 添加此属性可使编辑器中的一切正常。但问题是我的目标是3.5。所以我得到这个属性无法识别的运行时错误。
    【解决方案3】:

    可以试试

    <%@ Import Namespace="*" %>
    

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

    可能不是最好的方法,但它可能会起作用(不是在有 vs 所以无法测试的计算机上)

    【讨论】:

    • 不...已经尝试过了...还有&lt;@ Assembly Name="System.Core" %&gt;...没有区别。我会更新我的问题以指出我也尝试过。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多