Если я установлю <compilation targetFramework="4.0">
в web.config, Visual Studio 2010 отображает все методы расширения Linq в файлах ASPX (не в коде).Но когда я изменяю свой проект на целевой 3.5 (который поддерживает методы расширения Linq), Visual Studio удаляет ранее упомянутый атрибут в web.config, но IntelliSense Linq в файлах APSX также идет с ним.
Вопрос
Можно ли убедить Visual Studio 2010 не принимать и не использовать 2.0 при редактировании файлов ASPX, поэтому методы расширения Linq все равно будут перечислены в раскрывающемся списке intellisense?
Редактировать
Вручнуюдобавление сборок и импорт пространств имен не работает, как я уже отмечал в одном из моих предыдущих вопросов , когда я не знал, что происходит.
Проблема воспроизведения
Чтобы воспроизвести эту проблему, выполните следующие действия:
- В Visual Studio 2010 откройте свойства проекта MVC Asp.net и выберите NetFx 3.5
- Откройте
web.config
и удалите *Атрибут 1022 *, если он все еще там. - Напишите некоторый код в самом представлении (ASPX), использующем метод расширения Linq (т. Е.
(new List<string>()).Any(s => string.IsNullOrEmpty())
).Вы должны увидеть, что Any
не распознается Visual Studio 2010. - Начните добавлять один параметр конфигурации за одним в
web.config
.Не должно быть никакой разницы в методе Any
. - Добавьте
<% @ Imports ... %>
в представление.Не должно быть никакой разницы и в методе Any
.
Запуск приложения не является проблемой.Он запускается и также выполняет Any
метод расширения Linq.Нет проблем с этим.Здесь возникает проблема с поддержкой времени разработки.
Мой 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
- это глобальная настройка для этого.