Visual Studio не показывает расширения Linq в моих представлениях Asp.net MVC - PullRequest
2 голосов
/ 11 ноября 2010

Это сбивает меня с толку, и я не могу заставить 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 не может видеть System.Core сборку для перечисления своих методов расширения в System.Linq пространстве имен.

Ответы [ 3 ]

5 голосов
/ 11 ноября 2010

Вам нужно добавить атрибут targetFramework к элементу компиляции в вашем web.config:

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

Добавьте это в ваш web.config, и вы должны снова восстановить intellisense в ваших представлениях.

1 голос
/ 14 ноября 2010

Конечно, 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>
1 голос
/ 11 ноября 2010

можно попробовать

<%@ Import Namespace="*" %>

где * - пространство имен, которое вы хотите использовать, например, System.Linq

, вероятно, не самый лучший способ сделать это, но он может работать (не на компьютере с таким тестом против *)

...