Pregunta ¿Deshabilitar la herencia web.config?


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?

Actualizar: Como vinculado por Stephen Burris, utilizando el <location> la etiqueta 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>

los <configSections> y <runtime> las secciones 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?


32
2017-12-15 01:46


origen


Respuestas:


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

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

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

Las secciones de configuración parecen imposibles de heredar, pero otras partes de la configuración se pueden "comentar" de esta manera y no se heredan.


18
2017-12-15 03:25



Si puede usar dos grupos de aplicaciones separados, puede detener completamente la herencia mediante el uso de un atributo enableConfigurationOverride="false" 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>

11
2017-10-15 11:16



En mi opinión, cada vez que luché con esto, la respuesta terminó 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.


7
2018-02-24 08:45



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 un <clear /> etiqueta antes del <add name=... />, etc. Para Membresía, 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 :-)


4
2017-12-15 02:58