Шаги по расследованию причины повторяющегося раздела Web.Config
Симптомы
- В IIS 7 и Dot Net 2.0 интегрированный пул приложений: двойной щелчок, чтобы просмотреть любой
В разделе web.config появляется диалоговое окно с ошибкой:
!["There was an error while performing this operation.... Filename... web.config... Error: There is a duplicate..."]()
-
При просмотре URL отображается: "Внутренняя ошибка сервера Http 500.19".
Существует дубликат... 'system.web.extensions/scripting/scriptResourceHandler'
раздел.... "
-
Запуск приложения из VS 2008 появляется "Невозможно начать отладку на веб-сервере..." .
Инфраструктура
- Веб-сервер: IIS 7 работает под управлением Windows 7 x64
- ASP.Net MVC2
- Пул приложений: встроенный Dot Net 2.0
- VS 2008
Вещи, пробитые
- Проверено, была ли проблема в других каталогах приложений IIS на одном компьютере.
- Удалено и добавлено приложение в IIS.
- Возврат к предыдущим версиям файла web.config.
- Выбрана последняя рабочая версия исходного кода. Восстановил приложение, добавил новый каталог приложения и попытался просмотреть содержимое web.config из IIS.
- Посмотрел файлы web.config, которые могут иметь дубликаты разделов:
- Inetpub root.
- "C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config"
- Вложенная папка "Виды" в приложении ASP.Net MVC.
- Исправлен исходный код другой машины. Установите папку приложения IIS 7. Нет проблем с Web.config.
Вопрос
- Если причиной этой ошибки является другой файл web.config, где еще я должен смотреть?
- Есть ли другие причины для этих симптомов?
Ответы
Ответ 1
Добавьте это в контрольный список.
- Убедитесь, что файл machine.config, который вы проверяете, находится в той же структуре Dot Net, что и пул приложений, в котором работает ваше приложение.
В моем случае пулы приложений по умолчанию были изменены с Dot Net 2.0 на Dot Net 4.0. Это изменило корневой файл machine.config на версию 4.0. Эта версия содержит раздел "scriptResourceHandler", а также другие. Таким образом, предупреждение о дублировании разделов.
Ответ 2
Если вы используете DotNetOpenAuth библиотеку на своем веб-сайте, а ваш сайт - .NET 4.0 app
, вам нужно убедиться, что эта строка NOT в web.config
<section name="uri" type="System.Configuration.UriSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
Я установил DNOA с помощью NuGet, и он автоматически добавил эту строку в мой файл web.config. Поэтому мне пришлось удалить его.
Кстати, если вы используете встроенный (hella-crappy) визуальный студийный сервер разработки (он же Cassini).. вы не получите эту проблему/проблему. Это только тогда, когда вы переместите свой код на IIS7 express или полный IIS7, эта проблема возникнет.
Итак, удалите эту единственную строку, а затем получите счастливый танец.
Ответ 3
В IIS 7 измените параметр "Пулы приложений" для appPool с именем "Classic.NET AppPool" на V2.0. Сделайте это, щелкнув правой кнопкой мыши приложение Classic.NET AppPool и выбрав "Основные настройки...".
затем reset версия .NET Framework версии V2.0.xxxxx. Перезагрузите пул приложений и перезапустите веб-сайт, и он должен работать нормально.
Ответ 4
Решение состоит в том, чтобы изменить файл machine.config.
- Переместите разделы в файл machine.config для ASP.NET 2.0
- Или удалить разделы из файла machine.config для ASP.NET 4.0
Здесь люди из www.asp.net дают правильное решение:
http://www.asp.net/learn/whitepapers/aspnet4/breaking-changes
Посмотрите:)
Ответ 5
Это устранение неполадок MS также может помочь: http://support.microsoft.com/kb/942055
Ответ 6
Моя проблема была совсем другой, и это будет зависеть от того, какой раздел является дубликатом.
Например, у меня был дублирующий раздел регистрации, который, как представляется, является результатом родительского и дочернего приложений с использованием разных версий Microsoft Enterprise Library
Ответ 7
Возможно, стоит открыть файл applicationHost.config
:
C:\Windows\System32\inetsrv\config\applicationHost.config
В частности, найдите теги <location>
, которые соответствуют имени сайта (может быть несколько записей), и посмотрите, есть ли там дубликаты разделов scriptResourceHandler
. Я также проверил бы содержимое <location path="">
.