Errore durante l'utilizzo di una sezione registrata come allowDefinition = 'MachineToApplication' oltre il livello dell'applicazione


193

È un errore utilizzare una sezione registrata come allowDefinition = 'MachineToApplication' oltre il livello dell'applicazione.

La riga superiore di tutte le mie pagine aspx nella mia directory / portal / contiene questo messaggio di errore e so che è comune. Ho cercato su Google questo messaggio di errore senza fine e vedo molti post che mi dicono di configurare la cartella / portal / come un'applicazione in IIS (che ho) e altri post che mi dicono che ho nidificato web.configs (ma nessuna delle pubblicazioni offre una guida verso una soluzione).

La mia configurazione è che ho un web.config nella mia directory principale, e quindi sto cercando di creare un portale aziendale, nella directory / portal /. La directory / portal / ha il suo web.config (necessario).

La mia linea 50.config è così:

    <customErrors mode="Off" defaultRedirect="customerrorpage.aspx"/>
    <anonymousIdentification enabled="true"/>
    <authentication mode="Forms"/>
    <membership defaultProvider="MyProvider">

Quindi ho domain.com/web.config AND domain.com/portal/web.config ... quindi la mia pagina domain.com/portal/default.aspx non verrà caricata.

Qual è la vera soluzione a questo? Posso in qualche modo trovare un modo per unire il mio web.config di root con il mio / portal / directory web.config, o sto andando fuori base qui?

Qualsiasi suggerimento sarebbe davvero apprezzato!


1
Se ti aspetti che / portal / sia un'applicazione separata sotto il tuo sito Web principale (come nel caso in cui stai inserendo un web.config), devi configurarlo come directory virtuale. Quale versione di IIS stai usando? Di solito è possibile fare clic con il pulsante destro del mouse sulla directory e, in Proprietà, cercare la scheda "Directory" e premere il pulsante "Crea" accanto al nome dell'applicazione, che probabilmente è attualmente disattivato. Per limitare l'ambito del file web.config principale, osservare l'attributo inheritInChildApplications = "false". Fammi sapere la tua versione di IIS.
precipitare il

Ciao cruscotto Sto usando IIS7 e / portal / dovrebbe essere solo una directory dei dipendenti della nostra azienda in cui le persone possono archiviare documenti, tenere un calendario e cose del genere. Penso che Benni abbia riassunto quello che stavi dicendo: nella sua seconda opzione, ha delineato la soluzione IIS. Sono sicuro che tra una di queste due soluzioni, posso capirlo. Grazie per il tuo tempo nel leggere questo Dash e per avermi aiutato. Quando vedrò l'opzione "crea", saprò che sto arrivando! Grazie ancora!
Jason Weber,

1
Ho avuto questo problema, dopo aver definito il profilo di pubblicazione da precompilare prima della pubblicazione. così la cartella obj odia un web.config che stava rompendo il progetto, dopo aver eliminato tutto nella cartella obj, ha funzionato di nuovo.
Rumplin,

Risposte:


219

Solo per informazioni di base; Le informazioni di configurazione per un sito Web ASP.NET sono definite in uno o più file Web.config. Le impostazioni di configurazione vengono applicate in modo gerarchico. Esiste un file Web.config "globale" che specifica le informazioni di configurazione di base per tutti i siti Web sul server Web; questo file risiede nella %WINDIR%\Microsoft.Net\Framework\version\CONFIGcartella. Puoi anche avere un file Web.config nella cartella principale del tuo sito web. Questo file Web.config può sovrascrivere le impostazioni definite nel file Web.config "globale" o aggiungerne di nuove. Inoltre, potresti avere file Web.config nelle sottocartelle del tuo sito Web, che definiscono nuove impostazioni di configurazione o sovrascrivono le impostazioni di configurazione definite nei file Web.config in alto nella gerarchia.

Alcuni elementi di configurazione in Web.config non possono essere definiti oltre il livello dell'applicazione, il che significa che devono essere definiti nel file Web.config "globale" o nel file Web.config nella cartella principale del sito Web. L' <authentication>elemento ne è un esempio. Il messaggio di errore sopra indica che esiste un file Web.config in una delle sottocartelle del sito Web che ha uno di questi elementi di configurazione che non possono essere definiti oltre il livello dell'applicazione.

Fonte: http://scottonwriting.net/sowblog/archive/2010/02/17/163375.aspx

Hai identificato correttamente i 2 possibili approcci.

1 - A seconda del contenuto del tuo secondo web.config e se la tua installazione lo consentirebbe (cioè lo stesso metodo di autenticazione) - aggiungi le <authentication>impostazioni e tutti gli altri elementi che dovrebbero essere definiti globalmente nel web.config in alto

2 - Se non riesci a unire i contenuti di web.config, dovresti essere in grado di trasformare la sottocartella in un'applicazione Web in IIS seguendo i passaggi contenuti in questo link archiviato di seguito. Il link originale non funziona più. (vedi archiviato ) Spero che questo aiuti.


8
Sì, Benni, questo ha aiutato e chiarito le cose, molte cose. Apprezzo molto il tuo tempo nel rispondere a questa domanda; Ho imparato un sacco leggendo la tua risposta e ora le cose hanno un po 'più senso. Penso che tenterò di unire i due file web.config - almeno la parte di autenticazione - e se ciò non funziona, esaminerò le varie opzioni di IIS7. Grazie ancora per il tuo tempo e le informazioni, Benni!
Jason Weber,

13
Quando creo un pacchetto di distribuzione Web, questo problema provoca la successiva generazione. Ha una copia di Web.config in MyWebSiteProject / obj / Debug / ...
Curtis Yallop

4
Dopo quasi un giorno di tentativi per capirlo, finalmente una risposta descrittiva e approfondita che in realtà ha spiegato il problema, invece di dire ... basta pulire la soluzione e ricostruire. Grazie per questo!
Dr. Paul Jarvis,

2
Ho scoperto che il problema più grande qui era che una build iniziale funzionava, ma poi una build successiva non è riuscita perché le impostazioni consentite nel web.config di livello superiore non erano legali nel web.config che ora veniva copiato nella cartella obj. Il trucco era rimuovere gli attributi offensivi al livello più alto e rimuovere la cartella obj per ottenere un web.config legale in una sottocartella. Ovviamente questo è un bug in Visual Studio, ma la soluzione è semplice se non è necessario utilizzare attributi nel web.config di livello superiore che sono illegali nel web.config di livello inferiore.
csells,

2
In Visual Studio 2012 e 2013, quando il file di configurazione ha Copia nella directory di output = Copia sempre, il processo Pubblica sembra rilasciare copie del file di configurazione nelle cartelle bin e obj, che innesca questa eccezione. La soluzione per questo problema di pubblicazione, identificato da Tim C., è impostare la proprietà del file di configurazione su Non copiare.
criticalfix

68

Per quello che vale, ho ricevuto l'errore "È un errore utilizzare una sezione registrata come allowDefinition = 'MachineToApplication' oltre il livello dell'applicazione." e ha finito per risolverlo cancellando le directory \ myWebApp \ obj \ Debug e \ myWebApp \ obj \ Release. Avevo anche bisogno di impostare una pagina di avvio predefinita. Ma poi l'app si è avviata bene. HTH.


24
+1 L'eliminazione della cartella OBJ sembra essere una soluzione comune ... stackoverflow.com/a/5175074/188926
Dunc

1
L'eliminazione del contenuto della cartella OBJ ha risolto anche questo problema per me. Sembra che ci siano molte altre potenziali cause di questo errore. La frase che mi ha aiutato a trovare la risposta giusta è stata "durante la pubblicazione".
Jim Neff,

1
Se avessi sulla cartella OBJ, proverei quello.
B. Clay Shannon,

L'impostazione della pagina di avvio predefinita mi ha aiutato dopo aver eliminato la cartella Debug (quindi assicurati di fare entrambe le cose).
LoJo,

Ho provato questo e non ha funzionato. Poi ho capito che avevo dimenticato di convertire i miei file pubblicati in un'applicazione all'interno di IIS.
eaglei22

60

Come dice RY4N sopra, non è necessariamente il web.config nella cartella del progetto a causare il problema. In alcuni casi ho scoperto che l'esecuzione di una build con il profilo Debug lascerà i detriti nella cartella Debug sotto il progetto in questione. C'è spesso un file web.config che porta all'errore sopra riportato quando si esegue successivamente una build con il profilo di rilascio.

La soluzione che funziona per me qui è eliminare l'intera cartella Debug che le build precedenti hanno creato nella directory del progetto.


1
Grazie Matteo; Finalmente l'ho capito un po 'di tempo fa, ma sì, ho dovuto compilare in versione, non eseguire il debug. Apprezzo il tempo che hai dedicato per rispondere!
Jason Weber,

3
Grazie per il consiglio! Ho appena eliminato le cartelle bin e obj nel progetto del mio sito Web e ho risolto il problema quando l'ho ricostruito.
Paul Stegler,

22

Stava accadendo anche sul mio computer di casa ma SOLO quando ho abilitato Build Views sulla configurazione della versione e ho creato una configurazione della versione. Altrimenti non è successo.

Sebbene l'opzione Build Views sia molto bella, ho finito per disabilitarlo perché questo "errore" veniva sempre visualizzato e mi impediva di eseguire l'app.


2
Grazie Signore ... che sembrava fare il trucco, insieme ad alcuni altri suggerimenti. Apprezzo il tuo tempo per rispondere!
Jason Weber,

1
Questo stava succedendo anche a me. Non so perché. Certo che diamine rende l'impostazione "MvcBuildViews" molto meno utile.
Ken Smith,

C'è un modo per avere MvcBuildViews impostato solo per le impostazioni dell'utente? Ti piace il file webproject.csproj.user?
C. Tewalt,

Ho iniziato a ricevere questo errore dopo l'installazione dell'aggiornamento 2 per VS 2013. Ho un progetto con un livello superiore e un sito Web figlio nidificato, entrambi configurati come applicazioni IIS. La disattivazione di MvcBuildViews ha risolto il problema anche per me.
Greg Enslow,

13

Tanto per dire

Se aggiorni (ad es. 2008 -> 2010) Un progetto Visual Studio creerà un backup (se lo si consente) nella soluzione del progetto che viene aggiunto alla nuova soluzione, Il vecchio Webconfig è il punto in cui l'errore sopra riportato può quindi provenire da .

" File Web.config in una delle sottocartelle del sito Web che ha uno di questi elementi di configurazione che non possono essere definiti oltre il livello dell'applicazione. " @Benni_mac_b

Per risolverlo: basta rimuovere la cartella di backup dal progetto e dalla soluzione, in questo scenario.


Grazie per queste informazioni, Ryan .... Ho solo VS 2010. Non sono sicuro di cosa intendi quando dici di rimuovere la cartella di backup dal progetto e dalla soluzione. Ma esaminerò ulteriormente la tua risposta. Ancora una volta, grazie per aver dedicato del tempo per provare ad aiutarmi! Ho appena pubblicato una domanda di follow-up qui: stackoverflow.com/questions/10414751/…
Jason Weber

12

Ho trovato un'altra possibile ragione per cui ciò accade.

Avevo un'applicazione web più vecchia costruita in 2.0. L'ho migrato in una soluzione 4.5.

L'applicazione è stata creata e messa a punto correttamente all'interno di Visual Studio, ma quando ho tentato di pubblicare l'applicazione Web, questo errore si è verificato più volte.

Alla fine ho scoperto che il problema era che Build Action per il file web.config era "Risorsa integrata" anziché "Contenuto". Inoltre, la copia nella directory di output è stata impostata su "Copia sempre" anziché "Non copiare". Non so quando sono state fatte queste impostazioni, ma credo che fosse tornato nella versione 2.0 dell'applicazione.

La modifica delle impostazioni per il file web.config ha permesso all'azione Pubblica nella pubblicazione di Visual Studio 2012 di funzionare perfettamente.


aveva provato ogni altra soluzione là fuori. questo ha aiutato. Il mio progetto è stato migrato nel tempo da Visual Studio 2010 al 2015, quindi forse "Copia sempre" era il valore predefinito nel 2010
Andreas Rathmayr,

Le proprietà per my web.config sono limitate a due: FileName e FullPath; in caso contrario, verificherei quale azione di build fosse.
B. Clay Shannon,

11

Ho avuto lo stesso problema in un progetto MVC. L'errore si è verificato quando ho provato a pubblicare. Si è scoperto che la cartella obj dovrebbe essere vuota (o almeno non contenere alcunaweb.config ).

In esecuzione Clean non ha funzionato per me.

Ho risolto il problema pulendo il obj cartella prima di qualsiasi build (nel mio caso la costruzione del progetto non richiederà così tanto tempo).

Ho scaricato il progetto e ho aggiunto quanto segue alla destinazione BeforeBuild

<Target Name="BeforeBuild">
    <Delete Files="$(SolutionDir)\$(ProjectDir)\bin\**\*.*" />
    <Delete Files="$(SolutionDir)\$(ProjectDir)\obj\**\*.*" />
    <RemoveDir Directories="$(SolutionDir)\$(ProjectDir)\bin" />
    <RemoveDir Directories="$(SolutionDir)\$(ProjectDir)\obj" />
    <Message Text="Clean obj/bin from web project" />
</Target>

Spero che questo ti aiuti


7

"È un errore utilizzare una sezione registrata come allowDefinition = 'MachineToApplication' oltre il livello dell'applicazione. Questo errore può essere causato da una directory virtuale non configurata come applicazione in IIS."

Ho avuto questo problema in VS.NET. Si è scoperto che durante la configurazione di alcune trasformazioni di configurazione avevo erroneamente impostato la proprietà del file Web.config "Copia sempre". Di solito imposto i miei file di trasformazione su "Copia sempre", ma il file root web.config viene lasciato su "Non copiare".

Attenzione, perché la modifica delle proprietà di web.config modifica anche tutte le trasformazioni nidificate.

Quindi, per risolvere:

1) Cambia web.config in "Non copiare"

2) Facoltativamente, se stai utilizzando le trasformazioni di configurazione, impostale su "Copia sempre"

3) Elimina le cartelle obj e bin dalla soluzione (potrebbero non essere visibili, quindi seleziona il nodo del progetto in Esplora soluzioni e fai clic sul pulsante della barra degli strumenti "Mostra tutti i file".

4) Pubblica

Ha funzionato per me.


5

Ho riscontrato questo errore solo durante la pubblicazione dell'applicazione.

Le proprietà dei file web.config (e delle trasformazioni) sono state impostate come:

  • Build Action - None
  • Copy to Output - Always.

La soluzione era cambiare le impostazioni in:

  • Build Action - Content
  • Copy to Output - Do not Copy

4

Ho anche avuto questo problema e si è verificato dopo aver utilizzato la Pubblicazione guidata per pubblicare il mio sito sul Web.

Dopo aver scavato molto mi sono imbattuto in questa segnalazione di bug sul sito Web Connect, https://connect.microsoft.com/VisualStudio/feedback/details/779737/error-allowdefinition-machinetoapplication-beyond-application-level

Un rappresentante degli Stati Uniti ha risposto e, oltre a spiegare perché questo era un problema che si è verificato durante la pubblicazione, ha anche incluso una soluzione temporanea che ha risolto il problema per me.


4

Elimina e crea nuovamente la directory virtuale. Fare clic con il tasto destro e convertire la directory virtuale in " Applicazione "


3

Fare clic sul Web.configfile da Esplora soluzioni e fare clic con il tasto destro del mouse su "Proprietà" e passare a "Copia nella directory di output: non copiare".

inserisci qui la descrizione dell'immagine


1

Per me il motivo era che la cartella obj era sotto la cartella del sito Web e dopo aver creato diverse configurazioni apparivano più web.config. Ho risolto il problema con vs2012 spostando la cartella obj fuori dal sito web. Per fare ciò ho aggiunto manualmente (nel blocco note) $ (SolutionDir) \ Obj \ $ (Configurazione) a ogni configurazione nel file di progetto del sito web.


1

Stavo avendo lo stesso problema quando avrei pubblicato il sito, se avessi creato il sito non avrei avuto problemi ma durante la pubblicazione avrei avuto questo terribile errore:

"È un errore utilizzare una sezione registrata come allowDefinition = 'MachineToApplication' oltre il livello dell'applicazione. Questo errore può essere causato da una directory virtuale non configurata come applicazione in IIS"

Ho provato tutto ciò che è stato dichiarato qui in questo post senza alcun motivo, ciò che ha funzionato per me è stato semplicemente creare un nuovo profilo di pubblicazione esattamente uguale a quello che ho usato e che funziona bene, non ottenere l'errore con il nuovo profilo ma fare con il vecchio. Non sono sicuro di quale sia la differenza, ma almeno posso pubblicare il mio progetto MVC.

Spero che questo aiuti qualcuno !!


1

Ecco un altro motivo: se copi l'intera app Web in una delle sue sottocartelle, otterrai questo errore. Sono riuscito a farlo su un vecchio sito quando ho copiato da una macchina all'altra - mi è stato chiesto di guardare il sito dopo un intervallo di circa 2 anni e si è verificato l'errore. Ci sono voluti un bel po 'di tempo, dato che non avevo più file di configurazione.


1

Ho riscontrato questo problema e risolto pulendo la mia soluzione di vecchi assiemi ecc.

da vs: Build> Soluzione pulita

quindi ricostruisci.


1

Avvio di Windows -> apri Siti -> IIS -> fai clic con il pulsante destro del mouse sul tuo sito -> Gestisci sito Web -> Impostazioni avanzate -> esplora Percorso fisico -> prova a selezionare la sottocartella della volta selezionata.

la logica è che il file di configurazione web all'interno della sottocartella sta tentando di apportare modifiche e questo non è permesso, deve essere la cartella selezionata: http://scottonwriting.net/sowblog/archive/2010/02/17/163375.aspx


1

Ottengo anche questo errore quando provo a distribuire un sito Web secondario nel sito Web.

La soluzione è:

  1. È necessario rimuovere alcune schede di configurazione come: profilo , appartenenza , roleManager , sessionState nel secondario
  2. Cambia autenticazione su Nessuno come: <authentication mode="None" />
  3. E vai a IIS fai clic destro sulla sottocartella - > Aggiungi applicazione.
  4. Ripristina IIS per risolvere questo problema.

Se ho altri problemi, non esitare a chiamarmi, forse troverò aiuto.


1

Ho ricevuto questo errore su localhost in Visual Studio 2017 e un semplice riavvio di Visual Studio ha risolto il problema.

Mi rendo conto che questo problema può anche essere causato dall'avere più di un web.config; uno all'interno di una sottocartella, ad esempio. se si dispone di più file web.config appositamente per un'altra applicazione: assicurarsi che la directory non sia vista come directory virtuale.


0

Assicurati di non cadere nella trappola di accedere al tuo sito locale in modo errato tramite localchost / mysite.test che dovrebbe essere mysite.test che ti darà questo errore.

Quando accedi al tuo sito come localhost / nome_dir, in questo caso il tuo web.conf scende al di sotto del livello di root e quindi questo errore.


0

Stavo migrando app e l'app aveva più app (più web.configs) al suo interno. Quello che ho fatto è stato andare in IIS, quindi fare clic con il tasto destro del mouse sulle sottocartelle, quindi "Converti in applicazione" e ha funzionato.


0

Ho ricevuto questo errore in modo diverso rispetto a tutti gli altri:

Stavo migrando da vs2010 con il progetto di distribuzione Web a vs2012 e un nuovo profilo di pubblicazione Web.

Ho creato un nuovo progetto di pubblicazione Web in vs2012 per pubblicare su file system (abbiamo un programma di installazione separato, questa è un'app commerciale) e stavo pubblicando in una cartella che si trovava all'interno del progetto Web esistente collegato a IIS.

Ciò ha causato l'errore durante la pubblicazione che mi ha inizialmente sconcertato perché stavo pubblicando sul file system, non su IIS (pensavo).

La soluzione era cambiare la pubblicazione in cartella all'esterno del progetto Web.


0

Andava bene, localhostma quando ho pubblicato una versione sul server, ho iniziato lo stesso errore per alcune pagine. Quindi ho ripulito la soluzione, ricostruito e pubblicato, le cose sono state riparate.


0

A volte, la risposta semplice è la migliore. Ho avuto due file web.config nel mio progetto. Quello a livello principale è dove dovevo apportare la modifica per gestire il timeout della mia sessione (che ha scatenato questo problema). Avevo un file di configurazione separato nella mia directory Razor Views, che aveva le impostazioni per Razor e le sue viste. Stavo aggiungendo una sezione lì (non a livello di applicazione!). Senza rendermi conto che avevo due file web.config separati, ho provato di tutto tranne cercare l'ovvio.


0

il mio errore è stato copiare accidentalmente incollando un web.config all'interno di un'altra cartella sul web server


0

Ho ricevuto questo errore quando ho dimenticato di convertire il progetto pubblicato in un'applicazione all'interno di IIS.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.