Подтвердить что ты не робот

IIS express: Невозможно добавить запись дубликата коллекции типа 'add' с уникальным ключевым атрибутом 'name', установленным для

В Visual Studio, Solution- > Web.Project- > Properties- > Web, я изменил свой Url проекта от http://localhost:51123/ до http://localhost:51123/NewProjectName, и я продолжаю получать эту ошибку:

"Невозможно добавить дублируемую запись коллекции типа 'add' с уникальным ключевым атрибутом 'name' set to...." на каждый добавленный модуль.

Добавление тега remove работает, но тогда это должно было быть проблемой даже до того, как я изменил URL. Любые предложения?

4b9b3361

Ответ 1

Я думаю, что IIS Express, вероятно, имеет 2 <application> -blocks, и оба будут указывать на один и тот же физический путь.

Перейдите в конфигурационный файл IIS Express в: My Documents\IISExpress\config\applicationhost.config

Поиск NewProjectName

Измените физический путь для корневого приложения на что-то другое. Укажите это на пустую папку.

Должно выглядеть примерно так:

<site name="NewProjectName" id="1">
  <application path="/" applicationPool="Clr4IntegratedAppPool">
    <virtualDirectory path="/" physicalPath="c:\Temp" />
  </application>
  <application path="/NewProjectName" applicationPool="Clr4IntegratedAppPool">
    <virtualDirectory path="/" physicalPath="c:\sourcecode\NewProjectName" />
  </application>
  <bindings>
    <binding protocol="http" bindingInformation="*:51123:localhost" />
  </bindings>
</site>

Ответ 2

Кроме того, убедитесь, что у вас нет дубликата файла web.config в одной из родительских папок (например: файл резервной копии web.config). Это была проблема с моей!

Ответ 3

Я начал беспорядочно получать эту ошибку. Я заметил, что iis express имеет два сайта. введите описание изображения здесь

Этот двойной слой заставляет IIS читать web.config с первого сайта и второй в \WFM. поэтому находить дубликаты. Я просто остановил все сайты и удалил \WFM из моего пути к веб-проекту. Однако вы можете очистить файлы и папки от вашего временного файла в IIS express. В моем случае у меня было несколько версий решения, а один проект проекта \user config имел дополнительный путь в URL веб-проекта. VS 2015 добавила его, или кто-то проверил в своей собственной пользовательской конфигурации TFS. Надеюсь, это поможет другим.

Ответ 4

Если вы создаете веб-сайт IIS с физическим путем, аналогичным папке проекта, а затем используйте его, создайте виртуальную папку для проекта, вы увидите эту проблему.
Ваш файл Web.config загружается дважды.
Вместо этого, как указал orjanto, создайте пустую папку и укажите на нее веб-сайт IIS, а затем используйте ее для создания виртуальной папки из Visual Studio.

Ответ 5

Все файлы web.config работают с несколькими каскадными уровнями наследования на уровне компьютеров, IIS, проектов и папок, каждый из которых обеспечивает более высокую степень специфичности.

Если вы получаете эту ошибку, значит, вы либо:

  1. Добавил один и тот же ключ дважды в один и тот же файл (маловероятно, поскольку вы бы его увидели)
  2. Тот же ключ уже существует в отдельном файле выше цепочки наследования

Для # 2 может быть много разных первопричин, но если вы хотите обойти их стороной, вы можете просто удалить все предыдущие объявления, а затем повторно добавить свои собственные на этом уровне (я бы заплатил хорошие деньги за функцию upsert).

Так что просто добавьте теги <remove> как это для любых оскорбительных элементов

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true">

    <remove name="ErrorLog" />
    <remove name="ErrorMail" />
    <remove name="ErrorFilter" />

    <add name="ErrorLog"    type="Elmah.ErrorLogModule, Elmah"    preCondition="managedHandler" />
    <add name="ErrorMail"   type="Elmah.ErrorMailModule, Elmah"   preCondition="managedHandler" />
    <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />

  </modules>
</system.webServer>

Ответ 6

Мой проект Url на вкладке Web внутри свойств проекта указал на неправильный URL-адрес, и я не смог его изменить ( "Хотелось бы создать Virtual Directory?", а VS был заблокирован в цикле (Да → Не удалось создать, No → Operation Canceled), пока я вручную не вернул Url в (некорректное) состояние, которое было раньше. Решение заключалось в том, чтобы запустить VS в качестве администратора. Я смог изменить этот URL-адрес, и все начало работать. Надеюсь, это поможет!

Ответ 7

Вы можете обнаружить, что после обновления до последнего пакета обновления Windows 10 июня 2017 года эта проблема возникает из-за того, что определенные узлы теперь отображаются под корневой конфигурацией (machine.config). Я удалил свои дубликаты из web.config, и все это снова работало.

Ответ 8

У меня была проблема одного типа. Запуск моего сайта, опубликованного в IIS, показала ту же ошибку.

Я видел файл web.config в папке wwwroot (вне папки приложения). Я удалил этот файл, и приложение прошло нормально.

Найдите файл web.config, расположенный в неправильной папке (над приложением папки).

Удачи!

Ответ 9

Ответ, который разместил @orjanto, решил проблему для меня, но у меня была еще одна проблема. После исправления Internet Explorer все еще думал, что моя HTML-страница была каталогом, а не файлом.

У меня были дубликаты в моем конфигурационном файле IIS Express:

<site name="MyAPI" id="56">
     <application path="/" applicationPool="Clr4IntegratedAppPool">
          <virtualDirectory path="/" physicalPath="C:\source\repos\MyAPI" />
     </application>
     <application path="/login.html" applicationPool="Clr4IntegratedAppPool">
          <virtualDirectory path="/" physicalPath="C:\source\repos\MyAPI" />
     </application>
     <bindings>
          <binding protocol="http" bindingInformation="*:57018:localhost" />
          <binding protocol="https" bindingInformation="*:44302:localhost" />
     </bindings>
 </site>

Обратите внимание на путь = "/login.html" во второй записи <application>.

Моя страница перенаправлялась на "localhost: 57018/login.html/", как будто это был каталог.

Удаление второй записи устранило проблему с дубликатами файла конфигурации, однако у меня продолжала возникать проблема, когда Internet Explorer, казалось, думал, что /login.html/является каталогом (Internet Explorer 11). Для диагностики проблемы я проверил Chrome, и Chrome работал нормально.

Я зашел в Internet Explorer, открыл Сервис> Свойства обозревателя> Вкладка "Общие". Затем в разделе "История просмотров" я удалил историю, файлы cookie и данные веб-сайта, & Temp. Интернет файлы.

Ответ 10

У меня такая же проблема. Оказалось, что у меня был другой проект, который использует IISExpress с тем же номером порта. Как только я изменил проект, чтобы использовать другой номер порта, ошибка исчезла.

Ответ 11

У меня была такая же проблема, вот что я сделал:

  • Я изменил настройки сервера с локального IIS на IIS Express:

enter image description here

  • Если он по-прежнему не работает, я изменил номер порта на другой, затем нажмите кнопку "Создать виртуальный каталог". Очистите решение, затем восстановите.

enter image description here

Ответ 12

Пока первый ответ действительно решил аналогичную проблему с моей стороны. Я также нашел альтернативное решение, при котором нет необходимости указывать первому веб-сайту пустую папку c:\temp. Я проверил этот альтернативный подход с моей стороны, и он работал отлично.

Вместо этого посмотрите на вторую запись пути приложения и найдите ее путь, измените path=/ на path=/localhost_portNumber; поэтому, если в информации о привязке упоминается порт 51123, используйте path=/localhost_51123 во второй конфигурации приложения.

Почему это простое изменение работает, мне не известно, но я посмотрел на файлы applicationHost.config работающих веб-сайтов в VS 2017, чтобы найти это решение.

Альтернативная разметка, которая работает для IIS Express (посмотрите путь второго virtualDirectory)

<site name="NewProjectName" id="1">
  <application path="/" applicationPool="Clr4IntegratedAppPool">
    <virtualDirectory path="/" physicalPath="c:\sourcecode\NewProjectName" />
  </application>
  <application path="/localhost_51123" applicationPool="Clr4IntegratedAppPool">
    <virtualDirectory path="/" physicalPath="c:\sourcecode\NewProjectName" />
  </application>
  <bindings>
    <binding protocol="http" bindingInformation="*:51123:localhost" />
  </bindings>
</site>

Ответ 13

Просто измените номер порта, который еще не используется другим приложением, и он работает