msbuild web-config

allowDefinition=error de msbuild ''MachineToApplication''



web-config (12)

A pesar de que el problema se explica y resuelve de una manera en la respuesta aceptada, quería mostrar una solución que puede ser mejor para otros casos. Esta solución se ha incluido en alguna versión de VS, pero solo puedo decir que tuve el problema en la actualización 5 de VS 2013. (Consulte "Cuidado" a continuación, podría solucionarse en esta versión, pero no solo en mi caso particular). caso).

Tomé prestada la solución del error: allowDefinition = ''MachineToApplication'' más allá del nivel de la aplicación en Visual Studio Connect.

La solución consiste en incluir estas líneas en el proyecto de aplicación web (archivo .csproj ) que maneja la eliminación de los archivos intermedios de salida (lo que no era una solución para la respuesta aceptada, ya que necesitaba esos archivos intermedios):

<!--Deal with http://connect.microsoft.com/VisualStudio/feedback/details/779737/error-allowdefinition-machinetoapplication-beyond-application-level, we will need to clean up our temp folder before MVC project starts the pre-compile--> <PropertyGroup> <_EnableCleanOnBuildForMvcViews Condition=" ''$(_EnableCleanOnBuildForMvcViews)''=='''' ">true</_EnableCleanOnBuildForMvcViews> </PropertyGroup> <Target Name="CleanupForBuildMvcViews" Condition=" ''$(_EnableCleanOnBuildForMvcViews)''==''true'' and ''$(MVCBuildViews)''==''true'' " BeforeTargets="MvcBuildViews"> <ItemGroup> <_PublishTempFolderNamesToCleanup Include="Database;TransformWebConfig;CSAutoParameterize;InsertAdditionalCS;ProfileTransformWebConfig;Package;AspnetCompileMerge" /> </ItemGroup> <!--Force msbuild to expand all the wildcard characters so to get real file paths--> <CreateItem Include="@(_PublishTempFolderNamesToCleanup->''$(BaseIntermediateOutputPath)**/%(identity)/**/*'')"> <Output TaskParameter="Include" ItemName="_EvaluatedPublishTempFolderNamesToCleanup" /> </CreateItem> <Delete Files="@(_EvaluatedPublishTempFolderNamesToCleanup)" /> </Target>

Cuidado: por alguna razón, probablemente porque lo incluí en el proyecto, mi objetivo de compilación para construir las vistas se llamaba "BuildViews" , en lugar de "MvcBuildViews" , así que tuve que modificar el atributo BeforeTargets consecuencia.

Tenemos un ASP.NET MVC con 4-5 configuraciones de compilación diferentes. Cada vez que cambiamos la configuración de compilación, necesitamos eliminar la carpeta obj para el proyecto web, ya que obtenemos el error ''allowDefinition ='' MachineToApplication ''. Un dolor, pero logramos eliminar la carpeta en los eventos de compilación pre / post. Ahora necesito configurar nuestro CI para crear paquetes de implementación. Esto significa que no puedo eliminar la carpeta obj. Cada vez que compilo, por ejemplo, con los siguientes parámetros de msbuild

/ p: CreatePackageOnPublish = true / p: DeployOnBuild = true

Recibo el error:

web.config (123): error ASPCONFIG: Es un error utilizar una sección registrada como allowDefinition = ''MachineToApplication'' más allá del nivel de la aplicación. Este error puede deberse a que un directorio virtual no está configurado como una aplicación en IIS.

Por lo que yo entiendo, el problema es que hay múltiples archivos .config en el proyecto. En nuestro caso, no los hay. Realmente podría usar algo de ayuda para encontrar una explicación y encontrar una solución permanente (no-hack).

Editar: esta pregunta está marcada como un duplicado, pero las respuestas correspondientes y la (s) causa (s) en los 2 hilos, son claramente diferentes entre sí. No estoy seguro de lo que se pretende con esta etiqueta: he leído esa publicación en particular antes de publicar esta pregunta, ya que no respondió mi pregunta. Hay varias causas para este mensaje de error. ¡Es "similar", pero definitivamente no es un duplicado!


Acabo de responder una pregunta similar here . Para recapitular, me encontré con este problema en uno de nuestros proyectos MVC, y fue debido a tener la propiedad MvcBuildViews en el archivo del proyecto establecido en true . Establecer la propiedad en false solucionó el problema.

<MvcBuildViews>false</MvcBuildViews>

También encontré esta respuesta que describe una alternativa que no requiere desactivar la creación de vistas.


Ese error indica que está intentando algo específico para una aplicación en un nivel de árbol IIS que no está definido como una aplicación. Por ejemplo, si intenta realizar funciones de nivel de aplicación en un archivo web.config en un directorio virtual, obtendrá ese error. Debe encontrar la ruta en la que se está implementando y asegurarse de que esté definida en IIS como una aplicación frente a una carpeta o vdir.


Esto no es necesariamente el mismo problema, y ​​para ser honesto, probablemente debido a la falta de conocimiento por mi parte, sin embargo tuve el mismo error cuando:

  1. Configuré un nuevo proyecto asp.net estándar que en realidad solo utilicé para material HTML5, por lo que no hay nada más que la estructura habitual del proyecto
  2. Entonces (¡sin pensarlo!) Agregué un nuevo proyecto WCF REST (que en realidad era solo otro proyecto base de asp.net que utilizaba muy buenos ejemplos de http://www.codeproject.com/Articles/128478/Consuming-WCF-REST-Services-Using-jQuery-AJAX-Call?fid=1597004&df=90&mpp=25&noise=3&prof=False&sort=Position&view=Quick&fr=26#xx0xx y http://geekswithblogs.net/michelotti/archive/2010/08/21/restful-wcf-services-with-no-svc-file-and-no-config.aspx

El problema fue que agregué el proyecto WCF REST (n. ° 2) como SUB-DIRECTORIO del proyecto principal (n. ° 1) y luego intenté construirlo. incluso si yo limpiaba el proyecto, por supuesto ... también hice que ambos proyectos usaran IISexpress porque pensé que había un problema usando el mismo puerto o algo así.

Por supuesto, el proceso de compilación vio la web.config desde el # 1 y luego un subdirectorio con otro web.config # 2.

Me doy cuenta de que esto probablemente debería ser una idea muy básica y me ha sorprendido hace un tiempo, sin embargo, a veces es el error más simple que es realmente doloroso.

Podría ayudar a otros ... que quizás no hayan tomado su café de la mañana ...


Hay una question similar aquí en SO con algunas buenas soluciones para este problema.

El problema es que la creación de un paquete de implementación crea una copia de web.config en una subcarpeta de / obj. Eso normalmente se eliminará si haces una reconstrucción o una limpieza. Sin embargo, si crea un paquete de implementación en una configuración (por ejemplo, Depuración) y luego cambia a otra configuración (por ejemplo, Versión) la carpeta obj / Depuración no se borra y el archivo web.config allí causa problemas.

La solución rápida es limpiar todas las configuraciones y luego hacer una (re) construcción. Alternativamente, puede eliminar la carpeta / obj en su proyecto. Para resolver definitivamente el problema, puede mover la salida intermedia (/ obj) fuera de la carpeta del proyecto o modificar el proyecto para forzar la limpieza de todas las configuraciones en la reconstrucción.


Limpiar la solución (Hacer clic con el botón derecho en Solución en VS, limpiar), funcionó para mí.


Limpie su proyecto Quite la carpeta / obj (probablemente usando publicar y desplegar? - hay un error en ella)


No sé si hay una solución "oficial", ya que parecía comenzar en múltiples proyectos míos sin ninguna razón que pueda encontrar en Visual Studio Premium 2012 (nunca sucedió en versiones anteriores de VS).

Como un trabajo para automatizar la eliminación del directorio obj como han dicho otros, similar a una respuesta del usuario Casual en esta publicación. VisualStudio: Cómo guardar la carpeta obj en otro lugar , donde desafortunadamente solo moviendo la ubicación de la carpeta obj no funcionó. siempre parece funcionar.

En su lugar, agregué algunos comandos en Build Events en la línea de comando del evento Pre-build:

rd "$(ProjectDir)obj" /S /Q md "$(ProjectDir)obj" md "$(ProjectDir)obj/Debug" md "$(ProjectDir)obj/Release"

Puede cambiar / agregar / eliminar subcarpetas para que coincidan con sus configuraciones de compilación personalizadas mediante la línea donde buildConfigName coincide con el nombre de la configuración de compilación que está utilizando:

md "$(ProjectDir)obj/buildConfigName"

¡Espero que esto ayude!


Tengo un problema algo similar, tenía la configuración principal como Copiar siempre, así que copió la configuración en el directorio bin. Cuando reedite el proyecto principal, recibí el error MachineToApplication. Así que mi solución fue simplemente cambiar la configuración a No copiar y eliminar la configuración adicional en la carpeta bin.


Tuve el mismo error pero con una página desplegada. Entonces me di cuenta de que el reloj de mi servidor web estaba retrasado hasta 2010 por alguna razón. configurarlo para la fecha correcta, corregir mi problema


consejo 1: limpiar y luego reconstruir.

consejo 2: simplemente cierre VS y ábralo de nuevo.

consejo 3: el proyecto descargado puede estar dentro de otra subcarpeta ... abra la carpeta que tiene sus archivos .net.

c: / demo1 / demo / (todos los archivos)

Debería tener que abrir la demo desde vs ... no demo1.


Yo también estaba borrando la carpeta obj hasta que tuve un conflicto con un script de compilación que lo requería. Catch-22, usé la respuesta aceptada en el siguiente enlace SO para mover la ubicación de la carpeta Obj a C:/Temp/BUILD . Tienes que hacerlo por archivo csproj, pero es una gran solución.

Aquí está el enlace: VisualStudio: Cómo guardar la carpeta obj en otro lugar

Tenga en cuenta que estoy usando una variable para el nombre del proyecto. R: / Temp / Build / Debug / $ (MSBuildProjectName)

Tengo la línea anterior en las secciones de depuración y publicación para todos mis proyectos, incluidos los proyectos de clase. Mi ruta de compilación es una unidad ram para la velocidad. Consulte este SO para obtener más información: ¿Cómo acceder a las variables de macro dentro del archivo csproj?