2008-12-15 32 views
32

Tengo una aplicación de administración de contenido en la raíz de mi sitio web, y estoy tratando de usar una aplicación diferente (una aplicación de facturación) en una subcarpeta. Desafortunadamente, el web.config del sitio raíz está interfiriendo con la sub-aplicación.¿Deshabilitar la herencia web.config?

¿Hay alguna manera de desactivar la herencia web.config para una subcarpeta?

Actualización: Como vinculado por Stephen Burris, usando la etiqueta <location> puede prevenir la herencia de parte de la configuración de la web, de la siguiente manera:

<?xml version="1.0"?> 
<configuration> 
<configSections> 
    .... 
</configSections> 
<location path="." inheritInChildApplications="false"> 
    <appSettings> 
     .... 
    </appSettings> 
    <connectionStrings/> 
    <system.web> 
     .... 
    </system.web> 
    <system.codedom> 
     .... 
    </system.codedom> 
    <system.webServer> 
     .... 
    </system.webServer> 
</location> 
<runtime> 
    .... 
</runtime> 
</configuration> 

El <configSections> y <runtime> secciones no aceptará que se adjunta en el etiqueta ... así que supongo que esto solo hace la mayor parte del trabajo. ¿Alguien sabe cómo hacerlo mejor?

Respuesta

18

No es un atributo que se puede utilizar en el Web raíz. archivo de configuración para hacer que sus aplicaciones secundarias no hereden sus contenidos.

inheritInChildApplications

Blog about inheritInChildApplications

MSDN article on ASP.NET Configuration File Hierarcy and Inheritance

poner la parte de la configuración que no es para la herencia dentro

secciones
<location inheritInChildApplications="false"> 
    <NotInheritedConfigPart/> 
</location> 

Config parecen ser imposible no hereda, pero aparte las partes de la configuración se pueden "comentar" de esta manera y no se heredan.

+0

No pude usar "inheritInChildApplications" porque a VS no le gustó. Lo que hice en cambio es negar las cosas de las que IIS se quejaba al usar una etiqueta . Eso funcionó para mí. – dyslexicanaboko

+3

Hay un problema con este enfoque. Puede deshabilitar la herencia de elementos en pero esto no le hace nada a la parte . ¿Alguien sabe cómo deshabilitar la herencia de los elementos en ? – Ropstah

4

Definiría explícitamente todas las configuraciones requeridas - nunca asuma que cualquier configuración todavía está configurada en el valor predeterminado.

Por ejemplo, si está definiendo un connectionString incluya una etiqueta <clear /> antes del <add name=... />, etc. Para la membresía, defina todos los atributos, incluido el nombre de la cookie. Y así.

Se puede hacer que el archivo un poco más grande pero sin duda le ayudará a evitar el "pero funcionó en mi caja" escenario también :-)

+0

No es exactamente lo que cabe esperar una buena respuesta, pero tal vez sea la opción menos mala ... – dkretz

7

En mi opinión, cada vez que he tenido problemas con esto la respuesta termina siendo efectivamente NO, y dejo esto aquí para que mi futuro yo lo encuentre y así no pierda más tiempo en ello.

He encontrado que esto es un gran problema cuando solo quieres agregar algo como un directorio virtual dentro de un sitio existente. Con un complejo archivo web.config, siempre acabo de darme por vencido y moverlo a una aplicación diferente por completo.

+0

¿Están arreglando esto en 'asp.next' o lo que sea que se trata? –

+3

¡No puedo creer que no haya forma de anular globalmente esto! ¡Qué gran cosa de s ** t! – Gareth

11

Si puede utilizar 2 grupos de aplicaciones independientes, se puede detener por completo la herencia mediante el uso de un attibute enableConfigurationOverride="false" en el archivo applicationHost.config como he descrito en esta pregunta: “Entry has already been added” - Two Separate App Pools

<add name="MyAppPool" enableConfigurationOverride="false" autoStart="true" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" > 
    <processModel identityType="NetworkService" /> 
</add> 
+0

Esto es extremadamente bueno. – AgentFire

+0

No funciona con IIS 8 :( – Rodolfo