2012-10-08 11 views
5

En mi proyecto Asp.Net MVC 4, he establecido en el archivo .csproj para construir la vista <MvcBuildViews>true</MvcBuildViews>. El problema es que la construcción del proyecto en el que consiguió el error:allowDefinition = 'Error MachineAApplication' configuración de error <MvcBuildViews> true</ MvcBuildViews>

It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS.

traté de eliminar la carpeta obj pero la elevación torreón de error. especificar el error de que el problema está en la fila etiqueta de autenticación:

<system.web> 
    <authentication mode="Forms"> 
     <forms loginUrl="~/Account/Login" timeout="2880" /> 
    </authentication> 

A menudo, soy capaz de ejecutar la aplicación mediante la ejecución de la aplicación (Tengo el error), la construcción de la aplicación y después de eso a correr de nuevo.

+0

Comprobar: http://stackoverflow.com/questions/4725387/mvcbuildviews-not-working-correctly –

Respuesta

1

que tenían el mismo problema al intentar publicar mi aplicación web después de habilitar MvcBuildViews validar mi sintaxis Razor

me encontré con este código en mi web.config

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

Intente comentar que, por lo que el comportamiento del compilador no se cambia

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

hacer lo que sugiere @matrixugly se solucionará el problema, sino que también provocará que la vista en tiempo de compilación de s superior trabajando también. ¿Asumo que aún quiere verificar sus puntos de vista en el momento de la compilación? Si ese es el caso, mejores soluciones a continuación.

Con el fin de entender por qué estas soluciones funcionan, tenemos que saber primero cómo se crea el problema:

  1. El desarrollador quiere comprobar en tiempo de compilación de puntos de vista, por lo que establece MvcBuildViews=true.
  2. La aplicación se compila bien, HASTA que publiquen el proyecto.
  3. Los intentos posteriores para construir el proyecto resultado de un error en tiempo de compilación: It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS.

Entonces, ¿qué hace que este problema? Cuando se publica el proyecto del compilador, por defecto usa <project-dir>\obj\ para colocar copias de los archivos fuente con los que trabajará. Lamentablemente, estos archivos no se eliminan automáticamente cuando se completa la publicación. La próxima vez que el desarrollador compile el proyecto con MvcBuildViews=true, se producirá un error porque el compilador aspnet incluye la carpeta obj\ durante la compilación, ya que se encuentra debajo de la carpeta <project-dir>.

Entonces, ¿cómo solucionamos esto? Bien, tiene cuatro opciones:

  1. Conjunto MvcBuildViews=false. Realmente no considero esto como una solución, así que sigamos adelante.
  2. Eliminar los archivos en <project-dir>\obj\. Funciona, pero puede ser una molestia, ya que tiene que hacerse después de cada publicación.
  3. Cambie la ruta que la publicación utiliza como un directorio intermedio mediante el uso de la propiedad <BaseIntermediateOutputPath> en el archivo de configuración del proyecto.

    Ejemplo (Ref: this link):

    <BaseIntermediateOutputPath> [SomeKnownLocationIHaveAccessTo] </BaseIntermediateOutputPath>

  4. Añadir una nueva sección en su archivo de configuración de proyecto que elimina los archivos involucrados para que en la acumulación (referencia Microsoft Connect). Incluso he hecho que sea fácil para ti, sólo tienes que copiar y pegar:

    <PropertyGroup> 
    <_EnableCleanOnBuildForMvcViews Condition=" '$(_EnableCleanOnBuildForMvcViews)'=='' ">true</_EnableCleanOnBuildForMvcViews> 
    </PropertyGroup> 
    <Target Name="CleanupForBuildMvcViews" Condition=" '$(_EnableCleanOnBuildForMvcViews)'=='true' and '$(MVCBuildViews)'=='true' " BeforeTargets="MvcBuildViews"> 
    <ItemGroup> 
        <_TempWebConfigToDelete Include="$(BaseIntermediateOutputPath)**\Package\**\*" /> 
        <_TempWebConfigToDelete Include="$(BaseIntermediateOutputPath)**\TransformWebConfig\**\*" /> 
        <_TempWebConfigToDelete Include="$(BaseIntermediateOutputPath)**\CSAutoParameterize\**\*" /> 
        <_TempWebConfigToDelete Include="$(BaseIntermediateOutputPath)**\TempPE\**\*" /> 
    </ItemGroup> 
    
    <Delete Files="@(_TempWebConfigToDelete)"/> 
    </Target> 
    

Mi recomendación sería utilizar cualquiera de las opciones 3 o 4.

N. B. Para aquellos que nunca han editado su archivo de proyecto, no pueden editarlo mientras están cargados. Primero debe descargarse haciendo clic con el botón derecho y seleccionando Unload Project. A continuación, puede hacer clic con el botón derecho en el proyecto y editar el archivo del proyecto. Alternativamente, puede editar el archivo fuera de Visual Studio.

Cuestiones relacionadas