web-dev-qa-db-fra.com

IIS express: impossible d'ajouter une entrée de collection en double de type 'add' avec l'attribut de clé unique 'name' défini sur

Dans Visual studio, Solution-> Web.Project-> Propriétés-> Web, j'ai modifié mon URL de projet de http://localhost:51123/ à http://localhost:51123/NewProjectName et j'obtiens toujours l'erreur suivante:

" Impossible d'ajouter une entrée de collection en double de type 'add' avec l'attribut de clé unique 'name' défini sur .... " pour chaque module ajouté. 

L'ajout d'une balise remove fonctionne, mais cela aurait dû être un problème avant même que je modifie l'URL. Aucune suggestion?

28
Prasath Siva

Je pense que IIS Express a probablement 2 blocs <application>- et les deux pointeront sur le même chemin physique.

Accédez au fichier de configuration IIS Express dans: My Documents\IISExpress\config\applicationhost.config

Rechercher NewProjectName

Remplacez physicalPath pour l'application racine par quelque chose d'autre. Pointez-le sur un dossier vide.

Devrait ressembler à ceci: 

<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>
45
orjanto

Assurez-vous également de ne pas avoir un fichier web.config en double dans l'un des dossiers parents (par exemple, un fichier de sauvegarde web.config). C'était le problème avec le mien!

14
Shirlz

J'ai commencé à avoir cette erreur au hasard. J'ai remarqué que l'IIS Express avait deux sites.  enter image description here

Cette double couche amène IIS à lire le fichier web.config à partir du premier site et de l'autre en\WFM. donc trouver des doublons. Je viens d'arrêter tous les sites et de supprimer le fichier\WFM de mon chemin de projet Web. Cependant, vous pouvez supprimer les fichiers et les dossiers de votre fichier temporaire dans IIS express. Dans mon cas, j'avais plusieurs versions de la solution et le projet\user config d'une solution contenait un chemin supplémentaire dans l'URL du projet Web. VS 2015 l'a ajouté, ou quelqu'un a enregistré sa propre configuration d'utilisateur en TFS. J'espère que cela aide les autres.

12
Steve Coleman

Si vous créez un site Web IIS avec le même chemin physique que le dossier du projet, puis que vous l’utilisez pour créer un dossier virtuel pour le projet, vous allez voir le problème.
Votre fichier Web.config est chargé deux fois.
Comme indiqué par orjanto, créez un dossier vide, pointez le site Web IIS sur celui-ci, puis utilisez-le pour créer un dossier virtuel à partir de Visual Studio. 

8
Shekhar

Tous les fichiers web.config fonctionnent avec plusieurs niveaux d'héritage en cascade au niveau de la machine, des emplacements IIS, du projet et des dossiers, chacun offrant un degré de spécificité supérieur. 

Si vous obtenez cette erreur, cela signifie que vous avez soit:

  1. Ajout de la même clé deux fois dans le même fichier (improbable puisque vous l'auriez vue)
  2. La même clé existe déjà dans un fichier séparé plus haut dans la chaîne d'héritage

Il peut y avoir beaucoup de causes fondamentales différentes pour # 2, mais si vous voulez les contourner, vous pouvez simplement supprimer toutes les déclarations précédentes, puis rajouter les vôtres à ce niveau (je paierais beaucoup d'argent pour une fonctionnalité d'upert ).

Ajoutez donc les balises <remove> comme ceci pour tous les éléments incriminés:

<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>
4
KyleMit

J'ai eu le même problème, voici ce que j'ai fait:

  • J'ai modifié les paramètres de serveur de Local IIS à IIS Express:

 enter image description here

  • Si cela ne fonctionne toujours pas, j'ai changé le numéro de port en un numéro de port Différent, puis cliquez sur le bouton Créer un répertoire virtuel. Nettoyez la solution Puis reconstruisez.

 enter image description here

0
Willy David Jr

J'ai eu le même problème. Il s'est avéré que j'avais un projet différent utilisant IISExpress avec le même numéro de port. Une fois que j'ai modifié le projet pour utiliser un numéro de port différent, l'erreur a disparu.

0
Parallel Park

Mon URL du projet dans l'onglet Web dans les propriétés du projet indiquait une URL incorrecte et je ne pouvais pas le modifier ("Voulez-vous créer un répertoire virtuel?" Et VS était verrouillé dans une boucle (Oui -> Impossible de créer, Non -> Opération annulée) jusqu'à ce que je rétablisse manuellement l'URL à l'état (incorrect) qu'il était auparavant. La solution consistait à exécuter VS en tant qu'administrateur. J'ai pu modifier cette URL et tout a commencé à fonctionner. J'espère que cela aide!

0
Mark

J'ai eu un problème du même type. En exécutant mon site publié sur IIS, la même erreur a été affichée.

J'ai vu un fichier web.config dans le dossier wwwroot (hors du dossier de l'application) .

Recherchez un fichier web.config placé dans un mauvais dossier (au-dessus de votre application de dossier).

Bonne chance!

0
AlexQL

Vous constaterez peut-être qu'après la mise à niveau vers le dernier service pack Windows 10 de juin 2017, ce problème est dû au fait que certains nœuds semblent maintenant apparaître sous la configuration racine (machine.config). J'ai enlevé mes doublons de web.config et tout a encore fonctionné.

0
Alex Stephens

Le répondre que @orjanto posté a résolu le problème pour moi, mais j'ai eu un problème supplémentaire en plus de cela. Après la réparation, Internet Explorer pensait toujours que ma page HTML était un répertoire et non un fichier.

J'avais des doublons dans mon fichier de configuration 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>

Notez le chemin = "/ login.html" dans la deuxième entrée <application>.

Ma page redirigeait vers "localhost: 57018/login.html /" comme si c'était un répertoire.

La suppression de la deuxième entrée corrigeait le problème des doublons dans le fichier de configuration. Toutefois, Internet Explorer semblait toujours penser que /login.html/ était un répertoire (Internet Explorer 11). Pour diagnostiquer le problème, j'ai vérifié que Chrome et Chrome fonctionnaient bien.

Je suis allé dans Internet Explorer, puis dans Outils> Options Internet> Onglet Général. Puis, dans la section "Historique de navigation", j'ai supprimé l'historique, les cookies et les données de site Web, ainsi que les informations temporaires. Fichiers Internet.

0
Kyle B