Ошибка, которая вызывает сбой intellisense в VS 2010 в веб-элементах управления / страницах

#.net #asp.net #visual-studio-2010

#.net #asp.net #visual-studio-2010

Вопрос:

У меня есть проект веб-приложения, который я недавно преобразовал из VS2008 в VS2010, он не использует .Net 4.0 (вместо 3.5), но всякий раз, когда я открываю разметку на странице или элементе управления, он отображает следующую ошибку и впоследствии отключает intellisense:

http://www.kompeller.co.uk/images/vs2010_error.png

Строка 12 в моем web.config выглядит следующим образом:

  <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
  <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
    <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
    <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere" />
      <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
      <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
      <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
    </sectionGroup>
  </sectionGroup>
</sectionGroup>
  

Приложение настроено для запуска из IIS на моем компьютере, и у него нет родительских веб-сайтов, поэтому оно не наследуется от другого web.config.

Я повсюду искал решение, это сводит меня с ума!

Спасибо

Комментарии:

1. Из моего чтения эта строка, которую вы процитировали, будет дублирующей строкой. Есть ли system.web.extensions, определенный где-то до этого?

2. Нет, над этим нет дубликата, только 2 других раздела, совершенно не связанных. Похоже, это влияет на все мои проекты.

Ответ №1:

Проблема может быть не совсем в строке 12. В ошибке очень четко указано, что System.Web.Extensions это определено дважды в web.config, хотя. Просто найдите все экземпляры System.Web.Extensions и удалите дубликат.

Проверьте assemblies раздел и убедитесь, что дубликатов нет:

 <compilation debug="true">
  <assemblies>
    <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
    <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
    <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
    <add assembly="System.Web.Extensions.Design, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
    <add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
    <add assembly="System.Drawing.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />      
      <add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  </assemblies>
</compilation>
  

Проверьте pages/controls раздел и убедитесь, что дубликатов нет:

 <pages>
    <controls>
        <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
        ...
  

Проверьте httpHandlers раздел:

 <httpHandlers>
    <remove verb="*" path="*.asmx"/>
    <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    ...
  

Комментарии:

1. Я сделал это, и в этих разделах нет дубликатов. Интересно то, что это начало происходить только после того, как я перешел на 2010, и я сравнил версии в системе управления версиями, и существенных изменений не было.

2. Ваш ответ побудил меня найти другие случаи, смотрите Мой ответ ниже, спасибо!

3. Я сказал вам искать любые экземпляры System.Web.Extensions и заменять дубликат…

4. Не уверен, что я понял, замените дубликат чем?

5. Извините, я хотел сказать «удалить дубликат».

Ответ №2:

Хорошо, я, наконец, отследил это, основываясь на предположении Джеймса о том, что дубликат может отсутствовать в этой строке, это была неправильная конфигурация:

       <dependentAssembly>
    <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
    <bindingRedirect oldVersion="1.0.0.0-3.5.0.0" newVersion="3.5.0.0"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
    <bindingRedirect oldVersion="1.0.0.0-3.5.0.0" newVersion="3.5.0.0"/>
  </dependentAssembly>
  

Я удалил это, и все хорошо!