asp.net - ¿Deshabilitar la herencia web.config?
(4)
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.
¿Hay alguna forma de desactivar la herencia web.config para una subcarpeta?
Actualización: según lo vinculado por Stephen Burris , el uso de la etiqueta <location>
puede evitar la herencia de parte de la configuración 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>
Las <configSections>
y <runtime>
no aceptarán estar encerradas en la etiqueta ... así que supongo que esto solo hace la mayor parte del trabajo. ¿Alguien sabe cómo hacerlo mejor?
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 de <add name=... />
, etc. Para Membership, defina todos los atributos, incluido el nombre de la cookie. Y así.
Puede hacer que el archivo sea un poco más grande, pero definitivamente te ayudará a evitar el escenario "pero funcionó en mi caja" también :-)
Existe un atributo que puede usar en el archivo raíz web.config para que las aplicaciones secundarias no hereden sus contenidos.
inheritInChildApplications
Blog sobre inheritInChildApplications
Artículo de MSDN sobre la jerarquía y herencia del archivo de configuración ASP.NET
En mi opinión, cada vez que he luchado con esto, la respuesta termina siendo efectivamente NO, y dejo esto aquí para que mi futuro yo lo encuentre, para que 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.
Si puede usar dos grupos de aplicaciones separados, puede detener completamente la herencia mediante el uso de un atributo en el archivo applicationHost.config como describí en esta pregunta: "La entrada ya se ha agregado": dos grupos de aplicaciones separadas
<add name="MyAppPool" enableConfigurationOverride="false" autoStart="true" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" >
<processModel identityType="NetworkService" />
</add>