Error al usar una sección registrada como allowDefinition = 'MachineToApplication' más allá del nivel de aplicación


193

Es un error utilizar una sección registrada como allowDefinition = 'MachineToApplication' más allá del nivel de la aplicación.

La línea superior en todas mis páginas aspx en mi directorio / portal / tiene este mensaje de error, y sé que es común. Busqué en Google este mensaje de error sin fin, y veo muchas publicaciones que me dicen que configure la carpeta / portal / como una aplicación en IIS (que tengo), y más publicaciones que me dicen que he anidado web.configs (pero ninguna de las publicaciones ofrece orientación hacia una solución).

Mi configuración es que tengo un web.config en mi directorio raíz, y luego estoy tratando de hacer un portal de la compañía, en el directorio / portal /. El directorio / portal / tiene su propio (necesario) web.config.

Mi línea 50 de web.config es así:

    <customErrors mode="Off" defaultRedirect="customerrorpage.aspx"/>
    <anonymousIdentification enabled="true"/>
    <authentication mode="Forms"/>
    <membership defaultProvider="MyProvider">

Entonces tengo dominio.com/web.config Y dominio.com/portal/web.config ... para que mi página dominio.com/portal/default.aspx no se cargue.

¿Cuál es la solución real a esto? ¿De alguna manera encuentro una manera de fusionar mi raíz web.config con mi / portal / directorio web.config, o estoy fuera de la base aquí?

Cualquier orientación sería muy apreciada!


1
Si espera que / portal / sea una aplicación separada en su sitio web principal (que es si está colocando un archivo web.config allí), entonces debe configurarlo como un directorio virtual. ¿Qué versión de IIS estás usando? Por lo general, puede hacer clic con el botón derecho en el directorio y, en Propiedades, buscar la pestaña "Directorio" y presionar el botón "Crear" junto al nombre de la aplicación, que probablemente esté atenuado. Para limitar el alcance del archivo web.config padre, mire el atributo herencia de las aplicaciones = "falso". Déjame saber tu versión de IIS.
corre

Hola Dash Estoy usando IIS7, y se supone que / portal / es un directorio de empleados para nuestra compañía donde las personas pueden almacenar documentos, mantener un calendario y cosas así. Creo que Benni resumió un poco lo que estabas diciendo: en su segunda opción, describió la solución de IIS. Estoy seguro de que entre una de esas dos soluciones, puedo resolver esto. Gracias por su tiempo en leer este Dash y ayudarme. Una vez que vea esa opción "crear", ¡sabré que estoy en camino! ¡Gracias de nuevo!
Jason Weber

1
Tuve este problema, después de definir el perfil de publicación para precompilar antes de publicar. entonces la carpeta obj tiene un web.config que estaba rompiendo el proyecto, después de eliminar todo en la carpeta obj, funcionó nuevamente.
Rumplin

Respuestas:


219

Solo para información de fondo; La información de configuración para un sitio web ASP.NET se define en uno o más archivos Web.config. Los ajustes de configuración se aplican de forma jerárquica. Hay un archivo Web.config "global" que detalla la información de configuración de línea de base para todos los sitios web en el servidor web; Este archivo vive en la %WINDIR%\Microsoft.Net\Framework\version\CONFIGcarpeta. También puede tener un archivo Web.config en la carpeta raíz de su sitio web. Este archivo Web.config puede anular la configuración definida en el archivo Web.config "global" o agregar otras nuevas. Además, puede tener archivos Web.config en las subcarpetas de su sitio web, que definen nuevas configuraciones o anulan las configuraciones definidas en los archivos Web.config más arriba en la jerarquía.

Ciertos elementos de configuración en Web.config no pueden definirse más allá del nivel de aplicación, lo que significa que deben definirse en el archivo Web.config "global" o en el archivo Web.config en la carpeta raíz del sitio web. El <authentication>elemento es uno de esos ejemplos. El mensaje de error anterior indica que hay un archivo Web.config en una de las subcarpetas del sitio web que tiene uno de estos elementos de configuración que no se puede definir más allá del nivel de la aplicación.

Fuente: http://scottonwriting.net/sowblog/archive/2010/02/17/163375.aspx

Has identificado correctamente los 2 enfoques posibles.

1 - Dependiendo del contenido de su segundo web.config y si su configuración lo permitiera (es decir, el mismo método de autenticación), agregue el <authentication> configuración y cualquier otro elemento que deba definirse globalmente en la web.config superior

2 - Si no puede fusionar el contenido de web.config, entonces debería poder convertir la subcarpeta en una aplicación web en IIS siguiendo los pasos contenidos en este enlace archivado a continuación. El enlace original ya no funciona. (ver archivado ) Espero que esto ayude.


8
Sí, Benni, eso ayudó y aclaró las cosas, muchas cosas. Realmente aprecio su tiempo en responder esta pregunta; Aprendí muchísimo solo leyendo tu respuesta, y ahora las cosas tienen un poco más de sentido. Creo que voy a intentar fusionar los dos archivos web.config, al menos la parte de autenticación, y si eso no funciona, analizaré las diferentes opciones de IIS7. Gracias de nuevo por su tiempo y la información, Benni!
Jason Weber

13
Cuando construyo un paquete de implementación web, causa este problema la próxima vez que lo compilo. Tiene una copia de Web.config en MyWebSiteProject / obj / Debug / ...
Curtis Yallop

44
Después de casi un día de tratar de resolver esto, finalmente una respuesta descriptiva en profundidad que realmente explicaba el problema, en lugar de decir ... simplemente limpie su solución y reconstruya. ¡Gracias por esto!
Dr. Paul Jarvis

2
Encontré que el mayor problema aquí era que una compilación inicial funcionó, pero luego una compilación posterior falló porque la configuración permitida en web.config de nivel superior no era legal en web.config que ahora se copió a la carpeta obj. El truco consistía en eliminar los atributos ofensivos en el nivel superior y eliminar la carpeta obj para obtener un web.config legal en una subcarpeta. Obviamente, este es un error en Visual Studio, pero la solución es sencilla si no necesita usar atributos en el nivel superior web.config que son ilegales en el nivel secundario web.config.
Csells

2
En Visual Studio 2012 y 2013, cuando el archivo de configuración tiene Copiar al directorio de salida = Copiar siempre, el proceso de publicación parece soltar copias del archivo de configuración en las carpetas bin y obj, lo que desencadena esta excepción. La solución para este problema de publicación, identificado por Tim C., es establecer la propiedad del archivo de configuración en No copiar.
criticalfix

68

Por lo que vale, recibí el error: "Es un error usar una sección registrada como allowDefinition = 'MachineToApplication' más allá del nivel de aplicación". y terminó resolviéndolo borrando los directorios \ myWebApp \ obj \ Debug y \ myWebApp \ obj \ Release. También necesitaba establecer una página de inicio predeterminada. Pero, entonces la aplicación comenzó bien. HTH


24
+1 Eliminar la carpeta OBJ parece ser una solución común ... stackoverflow.com/a/5175074/188926
Dunc

1
Eliminar contenido de la carpeta OBJ también me solucionó esto. Parece que hay muchas otras causas potenciales de este error. La frase que me ayudó a encontrar la respuesta correcta fue "mientras publicaba".
Jim Neff

1
Si tuviera en la carpeta OBJ, lo intentaría.
B. Clay Shannon

La configuración de la página de inicio predeterminada hizo el truco para mí después de eliminar la carpeta de depuración no fue suficiente (así que asegúrese de hacer ambas cosas).
LoJo

Intenté esto y no funcionó. Luego me di cuenta de que olvidé convertir mis archivos publicados a una aplicación dentro de IIS.
eaglei22

60

Como RY4N dice anteriormente, no es necesariamente el web.config en su carpeta de Proyecto lo que causa el problema. En algunos casos, descubrí que ejecutar una compilación con el perfil de depuración dejará detritos en la carpeta de depuración del proyecto en cuestión. A menudo hay un archivo web.config aquí que conduce al error anterior cuando posteriormente ejecuta una compilación bajo el perfil Release.

La solución que me funciona aquí es eliminar toda la carpeta de depuración que las compilaciones anteriores crearon en el directorio del proyecto.


1
Gracias Matthew; Finalmente lo descubrí hace un tiempo, pero sí, tuve que compilar en versión, no depurar. ¡Te agradezco que te hayas tomado el tiempo para responder!
Jason Weber

3
¡Gracias por el consejo! Acabo de eliminar las carpetas bin y obj en el proyecto de mi sitio web y resolvió el problema cuando lo reconstruí.
Paul Stegler

22

También estaba sucediendo en la computadora de mi casa, pero SOLO cuando habilité Build Views en la configuración de lanzamiento Y construí una configuración de lanzamiento. De lo contrario no sucedió.

Aunque la opción Construir vistas es muy buena, terminé desactivándola porque este "error" siempre aparecía y me impedía ejecutar la aplicación.


2
Gracias Señor ... eso pareció funcionar, junto con algunas otras sugerencias. ¡Le agradezco que se haya tomado el tiempo para responder!
Jason Weber

1
Esto me estaba pasando a mí también. No estoy seguro de por qué. Seguro que hace que la configuración de "MvcBuildViews" sea mucho menos útil.
Ken Smith

¿Hay alguna manera de tener MvcBuildViews configurado solo para la configuración del usuario? ¿Como en el archivo webproject.csproj.user?
C. Tewalt

Comencé a recibir este error después de instalar la Actualización 2 para VS 2013. Tengo un proyecto que tiene un nivel superior y un sitio web secundario anidado, ambos están configurados como aplicaciones IIS. Desactivar MvcBuildViews también resolvió el problema para mí.
Greg Enslow

13

Sólo para decir

Si actualiza (por ejemplo, 2008 -> 2010) Un proyecto Visual Studio creará una copia de seguridad (si lo permite) en la solución del proyecto que se agrega a la nueva solución. .

"El archivo Web.config en una de las subcarpetas del sitio web tiene uno de estos elementos de configuración que no se pueden definir más allá del nivel de la aplicación " . @Benni_mac_b

Para solucionarlo : solo elimine la carpeta de copia de seguridad del proyecto y la solución, en este escenario.


Gracias por esa información, Ryan ... Solo tengo VS 2010. No estoy muy seguro de lo que quieres decir cuando dices eliminar la carpeta de copia de seguridad del proyecto y la solución. Pero buscaré más en su respuesta. Nuevamente, ¡gracias por tomarse el tiempo para ayudarme! Acabo de publicar una pregunta de seguimiento aquí: stackoverflow.com/questions/10414751/…
Jason Weber

12

Se me ocurrió otra posible razón por la que esto ocurre.

Tenía una aplicación web anterior construida en 2.0. Lo migré a una solución 4.5.

La aplicación se compiló y depuró muy bien cuando estaba dentro de Visual Studio, pero luego, cuando intenté publicar la aplicación web, este error ocurrió una y otra vez.

Finalmente descubrí que el problema era que Build Action para el archivo web.config era "Embedded Resource" en lugar de "Content". Además, el directorio Copiar a salida se configuró en "Copiar siempre" en lugar de "No copiar". No sé cuándo se realizaron estas configuraciones, pero creo que fue en la versión 2.0 de la aplicación.

La modificación de la configuración del archivo web.config permitió que la acción Publicar en la publicación de Visual Studio 2012 funcionara perfectamente.


había intentado cualquier otra solución por ahí. Este ayudó. Mi proyecto se migró con el tiempo de Visual Studio 2010 a 2015, por lo que tal vez "Copiar siempre" era el valor predeterminado en 2010
Andreas Rathmayr

Las propiedades de mi web.config están limitadas a dos: FileName y FullPath; de lo contrario, comprobaría cuál fue la acción de compilación para ello.
B. Clay Shannon

11

Tuve el mismo problema en un proyecto MVC. El error ocurrió cuando intenté publicar. Resultó que la carpeta obj debe estar vacía (o al menos no contener ninguna web.config).

Correr Cleanno me sirvió.

Resolví el problema limpiando el obj carpeta antes de cualquier compilación (la construcción del proyecto no tomará tanto tiempo de todos modos en mi caso).

Descargué el proyecto y agregué lo siguiente al objetivo BeforeBuild

<Target Name="BeforeBuild">
    <Delete Files="$(SolutionDir)\$(ProjectDir)\bin\**\*.*" />
    <Delete Files="$(SolutionDir)\$(ProjectDir)\obj\**\*.*" />
    <RemoveDir Directories="$(SolutionDir)\$(ProjectDir)\bin" />
    <RemoveDir Directories="$(SolutionDir)\$(ProjectDir)\obj" />
    <Message Text="Clean obj/bin from web project" />
</Target>

Espero que esto ayude


7

"Es un error usar una sección registrada como allowDefinition = 'MachineToApplication' más allá del nivel de la aplicación. Este error puede ser causado por un directorio virtual que no se configura como una aplicación en IIS".

Tuve este problema en VS.NET. Resultó que cuando estaba configurando algunas transformaciones de configuración, había configurado por error la propiedad del archivo Web.config "Copiar siempre". Normalmente configuro mis archivos de transformación en "Copiar siempre" pero dejo el archivo raíz web.config como "No copiar".

Cuidado, porque cambiar las propiedades de web.config también cambia todas las transformaciones anidadas.

Entonces, para arreglar:

1) Cambie web.config a "No copiar"

2) Opcionalmente, si está utilizando transformaciones de configuración, configúrelas en "Copiar siempre"

3) Elimine las carpetas obj y bin de la solución (puede que no estén visibles, seleccione el nodo del proyecto en el Explorador de soluciones y haga clic en el botón de la barra de herramientas "Mostrar todos los archivos".

4) Publicar

Trabajó para mi.


5

Experimenté este error solo durante la publicación de la aplicación.

Las propiedades de los archivos web.config (y transformaciones) se establecieron como:

  • Build Action - None
  • Copy to Output - Always.

La solución fue cambiar la configuración a:

  • Build Action - Content
  • Copy to Output - Do not Copy

4

También tuve este problema y surgió después de usar el Asistente de publicación para publicar mi sitio en la web.

Después de mucho investigar, encontré este informe de error en el sitio web de Connect, https://connect.microsoft.com/VisualStudio/feedback/details/779737/error-allowdefinition-machinetoapplication-beyond-application-level

Un representante de MS respondió y además de explicar por qué se trataba de un problema que se produjo al publicar, también incluyó una solución temporal que solucionó el problema para mí.


4

Eliminar y crear el directorio virtual nuevamente. Haga clic derecho y convierta el directorio virtual a " Aplicación "


3

Haga clic en el Web.configarchivo del Explorador de soluciones y haga clic con el botón derecho en "Propiedades" y cambie a "Copiar al directorio de salida: no copiar".

ingrese la descripción de la imagen aquí


1

Para mí, la razón fue que la carpeta obj estaba debajo de la carpeta del sitio web y aparecieron múltiples web.config después de crear diferentes configuraciones. Resolví el problema en vs2012 moviendo la carpeta obj del sitio web. Para hacer esto, agregué manualmente (en el bloc de notas) $ (SolutionDir) \ Obj \ $ (Configuración) a cada configuración en el archivo de proyecto del sitio web.


1

Estaba teniendo el mismo problema cuando publicaba el sitio, si construyo el sitio no tengo problemas, pero al publicar obtendría este terrible error:

"Es un error usar una sección registrada como allowDefinition = 'MachineToApplication' más allá del nivel de aplicación. Este error puede ser causado por un directorio virtual que no se configura como una aplicación en IIS"

Intenté todo lo que se ha indicado aquí en esta publicación sin ningún recurso, lo que funcionó para mí fue crear un nuevo perfil de publicación con exactamente el mismo que he estado usando y que funciona bien, no obtengas el error con el nuevo perfil pero hazlo con el viejo. No estoy seguro de cuál es la diferencia, pero al menos puedo publicar mi proyecto MVC.

Espero que esto ayude a alguien !!


1

Aquí hay otra razón: si copia toda su aplicación web en una de sus propias subcarpetas, obtendrá este error. Logré hacer esto en un sitio antiguo al copiar de una máquina a otra; solo me pidieron que mirara el sitio después de un intervalo de aproximadamente 2 años y se produjo el error. Me costó bastante averiguarlo, ya que no tenía múltiples archivos de configuración.


1

Tuve este problema y lo resolví limpiando mi solución de ensamblajes antiguos, etc.

from vs: Build> Solución limpia

luego reconstruir.


1

Inicio de Windows -> abrir sitios -> IIS -> haga clic con el botón derecho en su sitio -> Administrar sitio web -> Configuración avanzada -> navegar Ruta física -> intente seleccionar una subcarpeta de la que está seleccionando actualmente.

la lógica es que el archivo de configuración web dentro de la subcarpeta está intentando realizar cambios y esto no está permitido, tiene que ser la carpeta seleccionada: http://scottonwriting.net/sowblog/archive/2010/02/17/163375.aspx


1

También recibo este error cuando intento implementar un sitio web secundario en el sitio web.

La solucion es:

  1. Debe eliminar algunas pestañas de configuración como: perfil , membresía , roleManager , sessionState en el sub web.config
  2. Cambie la autenticación a Ninguno como: <authentication mode="None" />
  3. Y vaya a IIS, haga clic derecho en la subcarpeta - > Agregar aplicación.
  4. Restablezca IIS para resolver este problema.

SI tengo otro problema, no dudes en hacerme ping, tal vez encuentre ayuda.


1

Recibí este error en localhost en Visual Studio 2017, y un simple reinicio de Visual Studio solucionó el problema.

Me doy cuenta de que este problema también puede ser causado por tener más de un web.config; uno dentro de una subcarpeta, por ejemplo. si tiene varios archivos web.config a propósito para otra aplicación: asegúrese de que el directorio no se vea como un directorio virtual.


0

Asegúrese de no caer en la trampa de acceder incorrectamente a su sitio local a través de localchost / mysite.test, que debería ser mysite.test que le dará este error.

Cuando accede a su sitio como localhost / dir_name, en este caso, su web.conf cae por debajo del nivel raíz y, por lo tanto, este error.


0

Estaba migrando aplicaciones y la aplicación tenía múltiples aplicaciones (múltiples configuraciones web) dentro de ella ... lo que hice fue ir a IIS, luego hacer clic derecho en las subcarpetas y luego "Convertir a aplicación" y funcionó.


0

Recibí este error de manera diferente a todos los demás:

Estaba migrando de vs2010 con el proyecto de implementación web a vs2012 y a un nuevo perfil de publicación web.

Creé un nuevo proyecto de publicación web en vs2012 para publicar en el sistema de archivos (tenemos un constructor de instaladores separado, esta es una aplicación comercial) y estaba publicando en una carpeta que estaba dentro del proyecto web existente que está vinculado a IIS.

Esto causó el error durante la publicación que me desconcertó al principio porque estaba publicando en el sistema de archivos, no en IIS (pensé).

La solución fue cambiar la publicación a la carpeta fuera del proyecto web.


0

Estuvo bien, localhostpero cuando publiqué un lanzamiento en el servidor, comencé el mismo error para algunas páginas. Luego limpié la solución y la reconstruí y publiqué, las cosas se arreglaron.


0

A veces, la respuesta simple es la mejor. Tenía dos archivos web.config en mi proyecto. El del nivel principal es donde necesitaba hacer el cambio para lidiar con el tiempo de espera de mi sesión (que desencadenó este problema). Tenía un archivo de configuración separado en mi directorio Razor Views, que tenía configuraciones para Razor y sus vistas. Estaba agregando una sección allí (¡no a nivel de aplicación!). Sin darme cuenta de que tenía dos archivos web.config separados, probé todo excepto buscar lo obvio.


0

mi error fue copiar y pegar accidentalmente un web.config dentro de otra carpeta en el servidor web


0

Recibí este error cuando olvidé convertir el proyecto publicado en una aplicación dentro de IIS.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.