2013-08-29 10 views
26

In Visual Studio, Solution-> Web.Project-> Proprietà-> Web, ho modificato l'URL del progetto da http://localhost:51123/ a http://localhost:51123/NewProjectName e continuo a ricevere questo errore:Espresso IIS: impossibile aggiungere la voce raccolta duplicata di tipo 'aggiungi' con attributo chiave univoco 'nome' impostato su

"Impossibile aggiungere la voce insieme duplicato di tipo 'add' con unico attributo 'name' a chiave in ...." su ogni modulo aggiunto.

L'aggiunta di un tag di rimozione funziona, ma avrebbe dovuto essere un problema anche prima di aver cambiato l'URL. Eventuali suggerimenti?

+0

Hi Prasith, posso chiedere quale soluzione ha lavorato per voi per favore? – sanepete

risposta

40

Penso che IIS Express abbia probabilmente 2 <application> -blocchi ed entrambi punteranno allo stesso physicalPath.

Vai al file di configurazione di IIS Express: My Documents\IISExpress\config\applicationhost.config

Cerca NewProjectName

Modificare il physicalPath per l'applicazione radice a qualcos'altro. Puntalo verso una cartella vuota.

dovrebbe essere simile a questo:

<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> 
+0

Questo ha funzionato per me. Grazie. – adriaanp

+0

Per IIS, il file di configurazione è @ C: \ Windows \ System32 \ inetsrv \ config –

+4

In Visual Studio 2015 la posizione del file cofig è solutionFolder \ .vs \ cofig. Nota che .vs è nascosto. – user1568891

5

Se si crea un sito web IIS con il percorso fisico la stessa della cartella di progetto, e quindi utilizzarlo creare una cartella virtuale per il progetto, che si sta per vedere questo problema
Il file Web.config viene caricato due volte.
Invece come indicato da orjanto, creare una cartella vuota e puntare il sito Web IIS su di esso e quindi utilizzarlo per creare una cartella virtuale da Visual Studio.

+0

Grazie per averci risolto. – radbyx

11

Inoltre, assicurarsi di non avere un file web.config duplicato in una delle cartelle padre (es .: un file di backup web.config). Questo era il problema con il mio!

+0

Buon consiglio! Ho avuto una distribuzione web automatica andare storto e distribuire il web.config su una directory.La rimozione di quel file ha risolto il problema per me. –

8

Ho iniziato a ricevere casualmente questo errore. Ho notato che l'iis express aveva due siti. enter image description here

Questo doppio strato sta causando la lettura da parte di IIS del web.config dal primo sito e del secondo su \ WFM. quindi trovare duplicati. Ho appena interrotto tutti i siti e rimosso \ WFM dal mio percorso di progetto web. Tuttavia è possibile eliminare i file e le cartelle dal file temporaneo in IIS express. Nel mio caso avevo più versioni della soluzione e il progetto di una soluzione \ config utente aveva un percorso extra nell'URL del progetto web. VS 2015 lo ha aggiunto, o qualcuno ha controllato la propria configurazione utente in TFS. Spero che questo aiuti gli altri.

+4

Nel caso qualcuno stia cercando questo: ho dovuto rimuovere la .vs-Folder nel percorso della soluzione e il .user-file. – MHolzmayr

+0

Anche il mio sembrava così, ma cancellare i file temporanei non funzionava per me. Ho dovuto rimuovere l'intero nodo del mio sito dall'hosthost.config di IIS Express, trovato in ... \ Documenti \ IISExpress \ config – Danny

+0

Inavvertitamente avevo creato una nuova directory virtuale IIS Express per la stessa app. Ho trovato una voce duplicata nella cartella .vs, all'interno di 'applicationhost.config'. Una volta rimossa la voce duplicata, tutto ha funzionato di nuovo. –

0

L'URL del mio progetto nella scheda Web all'interno delle proprietà del progetto indicava l'URL errato e non ero in grado di cambiarlo ("Volete creare la directory virtuale?" E VS era bloccato in un ciclo (Sì -> Impossibile creare , No -> Operazione annullata) fino a quando non ho ripristinato manualmente Url allo stato (errato) che era prima.La soluzione era eseguire VS come Admin.Io potevo cambiare quell'URL e tutto ha iniziato a funzionare.Per favore è utile!

0

Potresti scoprire che dopo l'aggiornamento all'ultimo service pack di Windows 10 di giugno 2017, questo problema è dovuto al fatto che alcuni nodi sembrano ora apparire sotto la configurazione di root (machine.config). Ho rimosso i miei duplicati da web.config e tutto ha funzionato

0

Ho avuto un problema dello stesso tipo. Eseguendo il mio sito pubblicato su IIS, è stato mostrato lo stesso errore.

Ho visto un file web.config nella cartella wwwroot (fuori dalla cartella dell'applicazione). Ho rimosso questo file e l'applicazione è andata bene.

Cercare un file web.config inserito in una cartella errata (sopra l'applicazione cartella).

Buona fortuna!

0

Il answer che @orjanto pubblicato risolto il problema per me, ma ho avuto un ulteriore problema in aggiunta. Dopo la correzione, Internet Explorer pensava ancora che la mia pagina HTML fosse una directory anziché un file.

ho avuto duplicati nel mio file di configurazione di IIS espresso:

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

Annotare il percorso = "/ login.html" nella seconda <applicazione> ingresso.

La mia pagina stava reindirizzando a "localhost: 57018/login.html /" come se fosse una directory.

La rimozione della seconda voce ha risolto il problema con i file di configurazione duplicati, tuttavia ho continuato a riscontrare un problema in cui Internet Explorer sembrava pensare che /login.html/ fosse una directory (Internet Explorer 11). Per diagnosticare il problema, ho verificato che Chrome e Chrome funzionavano correttamente.

Sono andato in Internet Explorer, andato a Strumenti> Opzioni Internet> scheda Generale. Quindi, nella sezione "Cronologia delle esplorazioni", ho cancellato Cronologia, Cookie e dati del sito web, & Temp. File Internet.

0

Tutti web.config file funzionano off livelli multipli cascata di eredità sulla macchina, IIS, progetto, e le posizioni a livello di cartella, con ciascuno dei quali fornisce un più alto grado di specificità.

Se stai ricevendo questo errore, significa che hai uno:

  1. Aggiunta la stessa chiave due volte nello stesso file (improbabile dal momento che avresti visto)
  2. La stessa chiave già esiste in un file separato più in alto nella catena di ereditarietà

Non ci può essere un sacco di diverse cause alla radice di 2 #, ma se si vuole a parte loro passo, si può semplicemente rimuovere eventuali dichiarazioni precedenti e poi ri- aggiungi il tuo a quel livello (pagherei un buon prezzo per una funzione di upsert).

Quindi basta aggiungere <remove> tag in questo modo per tutti gli elementi incriminati:

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