allowDefinition = Error ‘MachineToApplication’ al publicar desde VS2010 (pero solo después de una comstackción anterior)

Puedo ejecutar mi aplicación Asp.Net MVC 2 sin problemas en mi computadora local. Solo Ejecutar / Depurar.

¡Pero si ya lo construí, no puedo publicarlo! Debo limpiar la solución y publicarla nuevamente. Sé que esto no es crítico para el sistema, pero es realmente molesto. “One Click Publish” no es “Solución limpia y luego One click publish”

El error exacto es el siguiente:

Error 11 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.

Sospecho que tiene algo que ver con el Web.Config en la carpeta de Vistas, pero ¿por qué solo después de que construí una vez anteriormente? Y solo para observar, la aplicación funciona bien una vez publicada.

tuve el mismo problema con mis aplicaciones MVC. fue frustrante porque aún quería que se revisaran mis vistas, así que no quería apagar MvcBuildViews

Afortunadamente encontré una publicación que me dio la respuesta. Mantenga MvcBuildViews como verdadero , luego puede agregar la siguiente línea debajo en su archivo de proyecto:

[SomeKnownLocationIHaveAccessTo] 

Y no hagas esa carpeta en la carpeta de tu proyecto. Funciona para mi. No es una solución perfecta, pero está bien por el momento. Asegúrese de eliminar la carpeta del paquete (que se encuentra dentro de la carpeta obj \ Debug y / u obj \ Release ) de la carpeta del proyecto, de lo contrario, seguirá recibiendo el error.

FWIW, MS sabe sobre este error …

Borré todo de mi carpeta Obj / Debug y corrigió este error. Esto me permitió irme en el

 true 

opción en mi archivo de proyecto (que es útil con la plantilla T4MVC T4).

Editar: Esto se puede lograr mucho más fácilmente simplemente usando el menú “Crear” -> “Reconstruir solución” (porque lo que realmente hace la reconstrucción es borrar la carpeta obj / Debug y luego construir la solución).

Estoy usando esta solución en la página de MS Connect para este error. Limpia todos los archivos obj y temp de su proyecto (todas las configuraciones) antes de ejecutar AspNetCompiler.

Modifique el objective MvcBuildViews en su archivo de proyecto para que dependa de los objectives que limpian los archivos de empaque que Visual Studio ha creado. Estos objectives se incluyen automáticamente en proyectos de aplicaciones web.

Todos los archivos de empaquetado se eliminarán cada vez que se ejecute el destino MvcBuildViews.

    

Este problema se produce cuando hay salida de proyecto web (archivos web de configuración con plantilla o publicación temporal) en la carpeta obj. El comstackdor de ASP.NET utilizado no es lo suficientemente inteligente como para ignorar cosas en la carpeta obj, por lo que arroja errores en su lugar.

Otra solución es desarticular la salida de publicación justo antes de llamar a . Abra su .csproj y cambie esto:

    

a esto:

          

Esto eliminará todos los archivos web.configs en \ obj, así como todas las carpetas de PackageTmp en \ obj.

Si está utilizando Web Publish, puede establecer MvcBuildViews=false y PrecompileBeforePublish=true , que precomstack después de la copia en la carpeta temporal (inmediatamente antes de publicar / paquete).

NOTA: PrecompileBeforePublish solo es compatible con la “nueva” stack de Pipeline de Publicación Web (VS2010 SP1 + Azure SDK o VS2012 RTM). Si usa VS2010 RTM, necesitará usar uno de los métodos alternativos.

En cuanto a la solución de jrummell, el ajuste:

DependsOnTargets="CleanWebsitesPackage;CleanWebsitesPackageTempDir;CleanWebsitesTransformParametersFiles;"

Funciona en VS 2010 , pero no en VS 2012 . En 2012 debes poner:

DependsOnTargets="CleanWebsitesPackage;CleanWebsitesWPPAllFilesInSingleFolder;CleanWebPublishPipelineIntermediateOutput"

Fuente:

VS 2010: C: \ Archivos de progtwig (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web \ Microsoft.Web.Publishing.targets

VS 2012: C: \ Archivos de progtwig (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web \ Microsoft.Web.Publishing.targets

Sé que esto ha sido respondido, pero solo quería agregar algo interesante que encontré.

Había configurado “MvcBuildViews” como falso en el proyecto, borré todas las carpetas bin y obj y aún recibía el error. Descubrí que había un archivo “.csproj.user” que todavía tenía “MvcBuildViews” establecido en verdadero.

Eliminé el archivo “.csproj.user” y luego todo funcionó.

Así que asegúrese de que si está cambiando su archivo csproj, también puede cambiar o eliminar el archivo “.csproj.user”.

También tuve este problema, así que creé un evento de ${projectPath}\bin,${projectPath}\obj\${ConfigurationName} en las propiedades del proyecto para limpiar los directorios de salida ( ${projectPath}\bin,${projectPath}\obj\${ConfigurationName} ). En otro proyecto, también recibí este error, incluso con el evento de limpieza en su lugar. En el segundo proyecto, estaba comstackndo las vistas que figuran en el archivo del proyecto:

 true 

Cambié el verdadero a falso, y ya no me quejé de ese error, pero aun así funcioné correctamente. No afirmaré que sé exactamente qué estaba causando el segundo error, pero al menos me hizo avanzar por el momento.

El problema tiene que ver con los archivos intermedios, pero hay otra solución que consiste en limpiar esos archivos intermedios antes de construir las vistas.

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 no estándar).

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 gestiona la eliminación de los archivos intermedios de salida:

   <_enablecleanonbuildformvcviews Condition=" '$(_EnableCleanOnBuildForMvcViews)'=='' ">true    <_publishtempfoldernamestocleanup Include="Database;TransformWebConfig;CSAutoParameterize;InsertAdditionalCS;ProfileTransformWebConfig;Package;AspnetCompileMerge">        

Cuidado: por alguna razón, probablemente porque lo incluí en el proyecto, mi objective de comstackción para construir las vistas se llamaba "BuildViews" , en lugar de "MvcBuildViews" , así que tuve que modificar el atributo BeforeTargets consecuencia. También simplifiqué el objective eliminando PropertyGroup y simplificando la condición, así:

    <_publishtempfoldernamestocleanup Include="Database;TransformWebConfig;CSAutoParameterize;InsertAdditionalCS;ProfileTransformWebConfig;Package;AspnetCompileMerge">        

En mi caso, vi que cuando tengo MvcBuildViews y PrecompileDuringPublish como ambos verdaderos, era lo que estaba causando este problema.

Así que eliminé PrecompileDuringPublish y esa solución funcionó para mí y no he enfrentado este problema desde entonces.

enter image description here