Compilar vistas en ASP.NET MVC


558

Quiero una tarea de msbuild para compilar las vistas para poder ver si hay errores de tiempo de compilación bien ... tiempo de compilación. ¿Algunas ideas?


1
No sé qué viewengine está usando, pero si está usando Razor, puede consultar mi publicación de blog: <a href = " chrisvandesteeg.nl/2010/11/22/… your asp.net mvc Razor views en un dll separado </a> También debería ser posible usar ese código para otros viewengines, pero aún no lo he hecho y probado
Chris van de Steeg

Respuestas:


154

Francamente, recomendaría el paquete Nuget RazorGenerator. De esa manera, sus vistas tienen un .designer.csarchivo generado cuando las guarda y además de obtener errores de tiempo de compilación para sus vistas, también se precompilan en el ensamblaje (= calentamiento más rápido) y Resharper también proporciona ayuda adicional.

Para usar esto, incluya el paquete nuget RazorGenerator en su proyecto ASP.NET MVC e instale la extensión " Razor Generator " en el elemento bajo Herramientas → Extensiones y actualizaciones .

Usamos esto y la sobrecarga por compilación con este enfoque es mucho menor. Además de esto, probablemente recomendaría .NET Demon de RedGate, lo que reduce aún más el impacto en el tiempo de compilación.

Espero que esto ayude.


1
¿Existe una solución similar para VS2012?
Daniel

66
Desafortunadamente, solo admite C # y no VB.Net
Ed DeGagne

3
@zoidbergi RazorGenerator trabaja con VS2012; cuando se usa RazorGenerator.Mvc y RazorGenerator.MsBuild: no hay necesidad de extensión. Ver entrada del blog en stacktoheap.com
Jeroen K

2
¿Se puede usar esto solo para encontrar errores, o reemplaza el motor de visualización al implementar la aplicación?
niico

He instalado el paquete Nuget RazorGenerator y la extensión Razor Generator. Nada ha cambiado en mi proyecto. No aparecieron archivos .designer.cs. Yo uso Visual Studio 2017.
Michael Samteladze

563

De la palabra léame doc para RC1 (no indexada por google)

Paso posterior a la compilación del compilador ASP.NET

Actualmente, los errores dentro de un archivo de vista no se detectan hasta el tiempo de ejecución. Para permitirle detectar estos errores en tiempo de compilación, los proyectos ASP.NET MVC ahora incluyen una propiedad MvcBuildViews, que está deshabilitada de manera predeterminada. Para habilitar esta propiedad, abra el archivo del proyecto y establezca la propiedad MvcBuildViews en verdadero, como se muestra en el siguiente ejemplo:

<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <MvcBuildViews>true</MvcBuildViews>
  </PropertyGroup>

Nota Habilitar esta característica agrega algo de sobrecarga al tiempo de compilación.

Puede actualizar los proyectos que se crearon con versiones anteriores de MVC para incluir la validación de vistas en tiempo de compilación realizando los siguientes pasos:

  1. Abra el archivo del proyecto en un editor de texto.
  2. Agregue el siguiente elemento debajo del elemento superior <PropertyGroup>: <MvcBuildViews>true</MvcBuildViews>
  3. Al final del archivo del proyecto, elimine el comentario del <Target Name="AfterBuild">elemento y modifíquelo para que coincida con lo siguiente:
<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
</Target>

27
Si esto no funciona para su proyecto, verifique si no hay un <MvcBuildViews> falso </MvcBuildViews> en algún lugar de su archivo de proyecto. Estaba anulando el nuevo elemento <MvcBuildViews> que agregué encima.
Adrian Grigore el

3
@mxmissile: Scott Guthrie recomendó agregar un Proyecto de implementación web a su solución para obtener este tipo de soporte en Proyectos de aplicaciones web: weblogs.asp.net/scottgu/archive/2006/09/22/…
Zhaph - Ben Duguid

66
Asegúrese de que EnableUpdateable esté establecido en falso o de lo contrario las vistas no se precompilarán. <EnableUpdateable> false </EnableUpdateable> <MvcBuildViews> true </MvcBuildViews> ( devcarl.posterous.com/… )
Carl Hörberg el

55
¿Por qué, por qué, por qué ... no hay atajo de teclado para construir con o sin vistas? MS por qué?
dariol

2
Esta es la solución agregada a las herramientas MVC. stackoverflow.com/a/2670792/878612
lko

50

Puede usar aspnet_compiler para esto:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler -v /Virtual/Application/Path/Or/Path/In/IIS/Metabase -p C:\Path\To\Your\WebProject -f -errorstack C:\Where\To\Put\Compiled\Site

donde " / Virtual / Application / Path / Or / Path / In / IIS / Metabase " es algo como esto: " / MyApp " o " / lm / w3svc2 / 1 / root / "

También hay una tarea AspNetCompiler en MSDN, que muestra cómo integrar aspnet_compiler con MSBuild:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="PrecompileWeb">
        <AspNetCompiler
            VirtualPath="/MyWebSite"
            PhysicalPath="c:\inetpub\wwwroot\MyWebSite\"
            TargetPath="c:\precompiledweb\MyWebSite\"
            Force="true"
            Debug="true"
        />
    </Target>
</Project>

55
Esto está desactualizado, vea un extracto del documento Léame a continuación.
JarrettV

1
La otra respuesta describe la tarea del proyecto con más detalle, pero la porción aspnet_compiler sigue siendo correcta (y útil en los agentes de compilación).
mlhDev

26

Además, si usa Resharper, puede activar Solution Wide Analysis y detectará cualquier error de compilación que pueda tener en los archivos aspx. Esto es lo que hacemos...


44
Es cierto que funciona para archivos aspx, pero el análisis de toda la solución no incluye los archivos ascx (controles de usuario)
mookid8000

3
Creo que lo hace en R # 5, pero es un gran recurso para grandes proyectos (incluso en mi máquina doméstica de 16GB no vale la pena usar).
Andrew

3
@Andrew / @ mookid8000 - R # también detectará errores que el compilador no detectará, como vistas y acciones faltantes / incorrectas. R # ralentizará un poco su PC (lo encuentro bien en un proyecto de gran tamaño con 4 GB de RAM y una CPU hipertrabada), pero recupero fácilmente el tiempo que paso esperando y termino haciendo menos operaciones en mi código como R # proporciona operaciones de nivel superior que agrupan los muchos pasos que tendría que tomar para lograr la misma tarea manualmente. ¡Tu proyecto debe ser enorme!
Drew Noakes

55
Para proyectos grandes, "ralentizar un poco su PC" es un eufemismo. Mi máquina de compilación tiene 16 GB de RAM y 8 núcleos (2 Xeons), y solo CRAWLS. Sin embargo, tengo la sensación de que R # no fue creado para proyectos de nuestro tamaño ... por ejemplo, nuestra solución tiene ~ 30 proyectos, un par de millones de LOC y muchos cientos de visitas. Me encanta R # en nuestros proyectos más pequeños (por ejemplo, algunos proyectos y no más de 50 vistas), pero en el grande siempre tenemos que desactivarlo.
Beep beep

1
Esto PUEDE funcionar, ¡pero CORRE! Encendí esto pensando que mi solución era pequeña y nunca terminó de "analizar" y se comió toda mi RAM y CPU. Me tomó 15 minutos recuperarme.
emragins

11

La próxima versión de ASP.NET MVC (disponible en enero más o menos) debería tener la tarea MSBuild que compila las vistas, por lo que es posible que desee esperar.

Ver anuncio



6

Compilación> Análisis de código de ejecución

Tecla de acceso directo: Alt+F11

Me ayudó a atrapar los errores de Razor.


2
Voté esta respuesta porque la tecla de acceso directo realmente exponía un error de Razor. Sin embargo, posteriormente noté que solo parece funcionar si tiene abierto el archivo .cshtml en el IDE.
Michael12345

1

El uso de la extensión de herramientas de productividad de Visual Studio ( gratis ) ayuda un poco . Específicamente, la Solution Error Visualizercaracterística. Con él, los errores de compilación se marcan visualmente en el explorador de soluciones (en el archivo fuente donde se encontró el error). Sin embargo, por alguna razón, esta característica no funciona como con otros errores en cualquier otro lugar del código.

Con las vistas MVC, cualquier error en tiempo de compilación seguirá subrayado en rojo en sus respectivos archivos .cs, pero la señalización de estos errores no se propaga hacia arriba en el Explorador de soluciones (de ninguna manera, ni siquiera en el archivo fuente que lo contiene).

Gracias por BlueCloudscorregir mi declaración anterior.

Acabo de informar esto como un problema en el proyecto github de la extensión.


1
Probé las herramientas eléctricas de productividad. Pero no se comporta como lo que se dice aquí. Hay un error en la vista de la maquinilla de afeitar, pero la construcción es un éxito. las vistas no están marcadas o subrayadas en rojo, ni en ninguna parte del árbol del explorador de soluciones.
Nubes azules

2
@BlueClouds: tienes razón. Creé un proyecto de muestra y agregué un error en tiempo de compilación en una vista. La extensión subrayará las líneas de error en rojo, pero no propagará el error en el explorador de soluciones. Estoy corrigiendo lo que dije en la respuesta. Dejo la respuesta aquí, ya que todavía ayuda un poco, mientras que de hecho no resuelvo el problema de manera efectiva.
Veverke
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.