2010-08-12 1 views
7

Non abbiamo avuto problemi nell'esecuzione di directory virtuali .NET 4.0 in siti Web 2.0, ma il modo opposto ci sta dando alcuni problemi. Questo è comprensibile, ma c'è un modo per ovviare a questo problema? Stanno correndo con diversi pool di applicazioni ... possiamo avere la directory virtuale saltare il web.config del sito web e andare direttamente a machine.config?Posso ospitare una directory virtuale .net 2.0 nel sito di asp.net 4.0?

Stiamo ottenendo il seguente errore:

Parser Error Message: Unrecognized attribute 'targetFramework'. Note that attribute names are case-sensitive. 

Source Error: 

Line 22: </appSettings> 
Line 23: <system.web> 
Line 24:  <compilation debug="true" targetFramework="4.0" /> 
Line 25:  <customErrors defaultRedirect="url" mode="RemoteOnly"> 
Line 26:  <error statusCode="404" redirect="~/404.aspx"/> 
+0

possibile duplicato di [E 'possibile negare completamente un "web.config" superiore in una sottocartella?] (http: //stackoverflow.com/questions/783732/is-it-possible-to-completely-negate-a-higher-web-config-in-a-subfolder) – Merritt

risposta

10

Aggiungere il seguente nella vostra radice web.config

<location path="." inheritInChildApplications="false"> 
+0

Come ho notato nella mia risposta, il ' 'direttiva non può essere usata per sovrascrivere' '. Traduzione: sfortunatamente, questo non funzionerà in tutti gli scenari. – Josh

1

Questo è un problema web.config eredità, e non è possibile superare tutti i problemi con la direttiva <location>.

Abbiamo riscontrato errori simili sulle direttive di configurazione duplicate su una delle nostre app. Dopo le indagini sembra che sia a causa di this issue.

In breve, il nostro sito Web principale è ASP.NET 3.5 (che è 2.0 con librerie specifiche aggiunte) e abbiamo una sotto-applicazione che è ASP.NET 4.0.

l'ereditarietà web.config fa sì che l'applicazione secondaria ASP.NET 4.0 erediti il ​​file web.config dell'applicazione padre ASP.NET 3.5.

Tuttavia, il web.config globale (o "root") dell'applicazione ASP.NET 4.0, che risiede in C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Config \ web.config e C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ web.config (a seconda del tuo bitness), contiene già sezioni di configurazione presenti nel web.config specifico per app di un'app .NET 3.5.

L'app ASP.NET 4.0 tenta quindi di unire insieme la radice ASP.NET 4.0 web.config e il genitore web.config (quello per un'app ASP.NET 3.5) e si imbatte in duplicati nello <configSections> nodo.

La direttiva <location> non può essere utilizzata per impedire l'ereditarietà delle voci <configSections>. L'unica soluzione che ho potuto trovare è quello di rimuovere le configSections dal web.config genitore, e poi o

  1. Determinare che non li avete bisogno nella vostra applicazione di root, o
  2. aggiornare il l'app genitore su ASP.NET 4.0 (in modo da ottenere l'accesso alle configSections di root web.config)