allowDefinition = 'MachineToApplication' error al publicar desde VS2010 (pero sólo después de una acumulación previa)

StackOverflow https://stackoverflow.com/questions/2566215

Pregunta

Me puede ejecutar mi aplicación Asp.Net MVC 2 sin un problema en mi equipo local. Sólo tiene que ejecutar / depuración.

Pero si ya he construido, no puedo publicarla! Tengo que limpiar la solución y la publique de nuevo. Sé que esto no es crítico del sistema, pero es realmente molesto. "Uno Haga clic en Publicar" no es "una solución limpia y luego publicar un clic"

El error exacto es el siguiente:

  

Error 11 Es un error usar una   sección registrada como   allowDefinition = 'MachineToApplication'   más allá del nivel de aplicación. Este error   puede ser causada por un directorio virtual   No está configurado como una aplicación   en IIS.

Sospecho que es algo que ver con el web.config en la carpeta Vistas, pero entonces ¿por qué sólo después construyo una vez con anterioridad. Y sólo para nota, la aplicación funciona bien una vez publicada.

¿Fue útil?

Solución

he tenido el mismo problema con mis aplicaciones MVC. era frustrante porque yo todavía quería que mis puntos de vista para ser revisados, así que no quería apagar MvcBuildViews

Por suerte me encontré con un cargo que me dio la respuesta. mantener a los MvcBuildViews como true , a continuación, se puede añadir lo siguiente debajo de la línea del archivo de proyecto:

<BaseIntermediateOutputPath>[SomeKnownLocationIHaveAccessTo]</BaseIntermediateOutputPath>

y hacer que la carpeta no en la carpeta de su proyecto. Funciona para mi. No es una solución perfecta, pero es bueno por el momento. Asegúrese de quitar la paquete la carpeta (situado dentro de la obj \ Debug y / o obj \ Release carpeta) de la carpeta de proyecto de lo contrario' ll seguir recibiendo el error.

Fwiw, MS saben acerca de este error ...

Otros consejos

He eliminado todo lo que fuera de mi carpeta obj / depuración y se fija este error. Esto permitió que me vaya en el

<MvcBuildViews>true</MvcBuildViews>

opción en mi archivo de proyecto (que viene muy bien con la plantilla T4MVC T4).

Editar: Esto se puede lograr mucho más fácil utilizando simplemente el "Build" -.> "Volver a generar solución" menú (ya que lo que realmente hace la reconstrucción está claro que el obj / depuración carpeta y luego solución acumulación)

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

  

modificar el MvcBuildViews objetivo en   el archivo de proyecto para que dependa   en los objetivos que limpia el   el envasado de archivos que tiene Visual Studio   creado. Estos objetivos están incluidos en   proyectos de aplicaciones web   automáticamente.

     

se eliminarán todos los archivos de embalaje   cada vez que los MvcBuildViews   ejecuta objetivo.

<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'" DependsOnTargets="CleanWebsitesPackage;CleanWebsitesPackageTempDir;CleanWebsitesTransformParametersFiles;">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(MSBuildProjectDirectory)" />
</Target>

Este problema se produce cuando no se emite proyecto web (web.config con plantilla o temporal publican archivos) en la carpeta obj. El compilador de ASP.NET utilizado no es lo suficientemente inteligente como para ignorar cosas en la carpeta obj, lo que genera errores en su lugar.

Otra solución consiste en bombardear el derecho de publicar la salida antes de llamar . Abra su .csproj y cambiar esto:

<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
  <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>

a esto:

<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
  <ItemGroup>
    <ExtraWebConfigs Include="$(BaseIntermediateOutputPath)\**\web.config" />
    <ExtraPackageTmp Include="$([System.IO.Directory]::GetDirectories(&quot;$(BaseIntermediateOutputPath)&quot;, &quot;PackageTmp&quot;, System.IO.SearchOption.AllDirectories))" />
  </ItemGroup>
  <Delete Files="@(ExtraWebConfigs)" />
  <RemoveDir Directories="@(ExtraPackageTmp)" />
  <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>

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

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

NOTA: PrecompileBeforePublish sólo es compatible con el "nuevo" pila publicación en Web Pipeline (VS2010 SP1 + Azure SDK o VS2012 RTM). Si está utilizando VS2010 RTM, tendrá que utilizar uno de los métodos alternativos.

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

DependsOnTargets="CleanWebsitesPackage;CleanWebsitesPackageTempDir;CleanWebsitesTransformParametersFiles;"

trabaja en VS 2010 , pero no en VS 2012 . En 2012 usted tiene que poner:

DependsOnTargets="CleanWebsitesPackage;CleanWebsitesWPPAllFilesInSingleFolder;CleanWebPublishPipelineIntermediateOutput"

Fuente:

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

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

Sé que esto ha sido contestada pero yo sólo quería añadir algo interesante que encontré.

Me había puesto los "MvcBuildViews" en false en el proyecto, eliminado todos bin y obj carpetas y yo todavía estaba recibiendo el error. Me pareció que había un archivo ".csproj.user" que todavía tenía 'MvcBuildViews' TRUE.

He eliminado el archivo ".csproj.user" y luego todo funcionaba.

Así que asegúrese de que si va a cambiar su archivo csproj que cambiar o borrar el archivo ".csproj.user" también.

Yo tenía este problema, así que creé un evento Pre-Construcción de las propiedades del proyecto para limpiar los directorios de salida (${projectPath}\bin,${projectPath}\obj\${ConfigurationName}). En otro proyecto También conseguía este error, incluso con el caso de la limpieza en el lugar. En el segundo proyecto que estaba recopilando los puntos de vista que se enumeran en el archivo de proyecto:

<MvcBuildViews>true</MvcBuildViews>

Me cambió el verdadero a falso, y ya no se quejaba de que el error, pero aún así se han ejecutado correctamente. No voy a reclamar Sé exactamente lo que estaba causando el segundo error, pero por lo menos me consiguió avanzar por el momento.

El problema tiene que ver con los archivos intermedios, pero hay otra solución que consiste en la limpieza de los archivos intermedios antes builnding las vistas.

Esta solución ha sido incluido en alguna versión de VS, pero sólo puedo decir que he tenido el problema en VS 2013 Actualización 5. (Ver la "Ten cuidado" a continuación, que podría ser fijado en esta versión, pero no funciona sólo en mi caso particular, no estándar).

Me tomó prestado el soltuion de error : allowDefinition = 'MachineToApplication' más allá del nivel de aplicación en Visual Studio Conectar

.

La solución consiste en la inclusión de estas líneas al proyecto de aplicación web (archivo .csproj) que manejan la eliminación de los archivos intermedios offedning:

<!--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 he incluido yo mismo en el proyecto, mi destino de generación para la construcción de las vistas fue nombrado "BuildViews", en lugar de "MvcBuildViews", así que tuve que modificar el atributo BeforeTargets consecuencia . También he simplificado el objetivo, mediante la eliminación de la PropertyGroup y la simplificación de la condición, como este:

  <Target Name="CleanupForBuildMvcViews" Condition="'$(MVCBuildViews)'=='true' " BeforeTargets="BuildViews">
    <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>

En mi caso vi que cuando tengo MvcBuildViews y PrecompileDuringPublish tanto como cierto -. Era lo que estaba causando este problema

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

introducir descripción de la imagen aquí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top