c# asp.net-mvc visual-studio-2010 msbuild

c# - MVCBuildViews no funciona correctamente



asp.net-mvc visual-studio-2010 (4)

Así que edité mi archivo csproj en una aplicación MVC 3 RTM para establecer la siguiente propiedad:

<MvcBuildViews>true</MvcBuildViews>

Esto debería hacer que mis vistas se cumplan durante la compilación y forzar un error de compilación si mi vista se rompe. Este es el único cambio que hice, sin embargo, cuando intento crear la aplicación, aparece el siguiente error:

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.

El proyecto se compila y se ejecuta con éxito si cambio de nuevo a falso,

Las siguientes son las tareas de compilación configuradas en el archivo csproj (estas nunca fueron editadas manualmente, fueron agregadas por Visual Studio 2010)

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

¿Me estoy perdiendo de algo? ¿Cómo configuro correctamente MVC 3 / Visual Studio 2010 para validar mis vistas en tiempo de compilación?



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 compilador 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 <AspNetCompiler>. Abra su .csproj y cambie 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 los archivos web.configs en / obj, así como todas las carpetas de PackageTmp en / obj.


Esto es lo que funcionó para mí. Opcionalmente, puede especificar una condición con la configuración.

<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="''$(MvcBuildViews)''==''true''"> <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" /> </Target> <Target Name="AfterBuild" Condition="''$(Configuration)''!=''Debug''"> <RemoveDir Directories="$(BaseIntermediateOutputPath)" /> </Target>


Tuve este problema hace unos días y lo solucioné al eliminar la carpeta obj / Debug. La limpieza del proyecto también funciona. Aunque no tengo idea de la causa del problema.

Vea la respuesta de Joe Cartano para una solución más permanente.