2011-02-18 22 views
9

Mi empresa tiene un sitio web creado en ASP.NET y objetivos .NET 3.5. Está demasiado destrozado y es masivo para ser convertido a .NET 4 de manera oportuna. Tengo la tarea de construir un sistema de tickets. Quiero que este sistema de tickets sea una aplicación completamente separada de la aplicación principal. Agregué un directorio al sitio web llamado "TicketingSystem", luego en IIS establecí esta carpeta como una aplicación, usando un grupo de aplicaciones que apunta a .NET 4.0. Supuse que esta aplicación no se vería afectada por la aplicación anterior, especialmente porque usa su propio grupo de aplicaciones, pero parece que se ve afectado de alguna manera. Navegando a este directorio con mi aplicación web .NET 4 en ella genera este error:¿Cómo usar una aplicación web .NET 4.0 dentro de una aplicación web .NET 3.5?

http://www.chevtek.com/content/error.jpg

que cubría la información sensible como rutas de archivos y otras cosas, pero la línea que dice el archivo de configuración tiene un camino para el padre archivo de configuración de la aplicación, no el archivo de configuración de la aplicación .net 4.

Se agradece cualquier información. ¿No es posible anidar una aplicación .net 4.0 dentro de una aplicación .net 3.5?

EDIT Como se solicita aquí hay una captura de pantalla de la estructura de directorios de IIS.

http://www.chevtek.com/content/IISDirectoryStructure.jpg

+0

Parece que debería funcionar. ¿Puedes publicar una captura de pantalla de la lista de búsqueda de carpetas en IIS para el sitio web? – mellamokb

+0

Claro, espera un minuto. – Chev

+0

¿Se aseguró de reciclar su grupo de aplicaciones, etc.? – Jimmy

Respuesta

12

La herencia Web.config lamentablemente no es algo que pueda desactivar completamente; Específicamente, la sección superior en el web.config que define qué secciones de configuración existen en el web.config no se puede ignorar/anular dentro de una aplicación secundaria.

La solución está documentada here(asp.net 4 breaking changes documentation); Esencialmente tienes que mover los valores que están actualmente en la aplicación superior hacia arriba en un archivo de configuración específico machine/FrameworkVersion y luego envolver todos (o al menos, la mayoría) de tu raíz web.config en una etiqueta de ubicación con inheritence deshabilitado.

+2

La página vinculada ha sido de gran ayuda. Gracias. Les contaré a todos cómo fue después esta noche. – Chev

+1

Esto lo hizo. Gracias por responder la pregunta que hice. – Chev

+1

Buena pregunta y respuesta. Nunca he sido fan del diseño de los archivos de configuración de .NET, pero esta solución demuestra de una vez por todas que el diseño es malo desde cero. ¡Es terrible modificar un archivo de configuración de toda la máquina, para poder hacer funcionar un solo par de aplicaciones web padre-hijo! –

0

Editar: Como se ha mencionado primer puerto de escala es asegurarse de que cada aplicación tiene su propio grupo de aplicaciones. Doble y triple verifique esto como un sitio .net 3.5 y un sitio .net 4 en el mismo grupo de aplicaciones causará la ruptura de todo el grupo de aplicaciones.

A continuación, tratar de eliminar todo el grupo de secciones de secuencias de comandos, desde mi experiencia lo resuelve y no he notado ningún problema

+0

Parece que su problema es que hace referencia al web.config incorrecto. Hacer cambios como este rompería su aplicación principal. – mellamokb

+0

Eso normalmente generaría un error "Es un error utilizar una sección registrada como allowDefinition = 'MachineToApplication' beyond the application level". – Hawxby

0

Suponiendo que su sitio actual utiliza AppPool1 dirigido a .NET 2.0

Crear AppPool2 , apúntelo a .NET 4.0 y úselo por el directorio virtual de su aplicación.

0

Asegúrese de que las cosas no estén en la configuración del equipo para el grupo de aplicaciones. Si es así, simplemente elimínelo de su configuración web.

1

En mis aplicaciones tengo más o menos éxito con las aplicaciones anidadas al usar el elemento <location> junto con <clear /> y elementos similares en el web.config.

Este es un extracto de un archivo web.config mío:

... 
<!-- Do not inherit. --> 
<location path="." inheritInChildApplications="false"> 
    <system.web> 
     ... 

La idea es poner todas las secciones que se hacen no desea heredar a las aplicaciones de los niños dentro de esas location elementos, como en mi ejemplo de arriba

1

¿Ha intentado establecer el atributo "inheritInChildApplications" en "false" en el archivo web.config de la carpeta principal?

Consulte Saul Dolgin's answer para obtener una pregunta similar sobre cómo hacerlo.

Cuestiones relacionadas