2011-03-31 18 views
42

Me preguntaba si se podrían compilar las vistas de Razor, como las vistas basadas en WebForm?¿Se pueden compilar las vistas Razor?

¿Tiene sentido incluso compilar las vistas de Razor y por qué alguien querría hacer eso?

+0

Técnicamente hablando, se compilan a partir del compilador just in time. También puede habilitar la generación de vistas para que falle la construcción con una casilla de verificación. –

+0

Relacionado: http://stackoverflow.com/questions/383192/compile-views-in-asp-net-mvc –

Respuesta

23

Sí, puedes. Eche un vistazo a la siguiente publicación: Compile your asp.net mvc Razor views into a seperate dll

Es una guía "paso a paso" sobre cómo compilar sus vistas en una dll separada. No sé si eso es lo que pretendes hacer, pero definitivamente te llevará en la dirección correcta.

+4

Esta respuesta no está actualizada, ahora debe consultar esta publicación: http://blog.davidebbo.com /2011/06/precompile-your-mvc-views-using.html – Quango

1

Sí, es posible. De hecho, el mejor ejemplo que puedo pensar serían los motores de plantillas de correo electrónico. Si compila y almacena en caché la plantilla, puede extraer mensajes de correo electrónico rápidamente sin tener que pasar por el análisis de nuevo.

Ese es un buen ejemplo del uso de Razor fuera de MVC también.

53

Editar:

Aquí es un blog sobre este tema, así:

How to Detect Errors of Our ASP.NET MVC Views on Compile Time

Para hacer que sus puntos de vista para ser compilado, haga lo siguiente;

  1. descargar su proyecto mediante la derecha derecha clic en el proyecto en el explorador de soluciones en VS y haciendo clic en descargar proyecto
  2. clic derecho en el proyecto que ha han convertido en proyecto disponible y haga clic en "Editar your_project_name .csproj "(que sería .vbproj si su proyecto es proyecto VB)
  3. consulte el siguiente código;

    <!--There some lines of code here and I deleted them to get to the point quickly--> 
    
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion> 
    <MvcBuildViews>false</MvcBuildViews> 
    

  4. el cambio del valor de la etiqueta de MvcBuildViews false a true

  5. después de que guardarlo y volver a cargar el proyecto .

Después de compilar su solución para compilarla, verá que su vista se compilará también.

NOTA: para probarlo, rompa algunos códigos en una de sus vistas a propósito y trate de compilar. Verás que recibirás un mensaje de error.

+1

Voy a intentarlo y ver qué pasa. –

+0

debería haber funcionado. ¿Lo intentaste? – tugberk

+5

Después de este cambio comencé a obtener '" allowDefinition = 'MachineToApplication' más allá del nivel de aplicación "' mensaje de error al construir mi solución. La solución fue ejecutar _Clean Solution_ en los modos * ambos * de depuración y liberación. –

28

La comprobación MvcBuildViews es excelente pero agrega una penalización de 5-10 segundos para crear su aplicación web si es lo suficientemente compleja. No almacena en caché la salida de compilación, por lo que realiza una compilación completa de todas sus vistas en todo momento.

He encontrado un buen compromiso siguiendo el above advice y añadiendo un atributo Estado:

<MvcBuildViews Condition=" '$(Configuration)' == 'Release' ">true</MvcBuildViews> 

es de esperar que ReSharper a airear cualquier error en los puntos de vista de todos modos y el desarrollador puede construir siempre en la configuración de liberación como prueba, tenemos un script "preflight" que los desarrolladores ejecutan para que puedan asegurarse fácilmente de que los objetivos del paquete funcionen, y así sucesivamente, y si todo eso falla, el servidor de compilación lo atrapará.

Quizás este truco sea obvio, pero realmente solo he comenzado a aprender sobre msbuild correctamente en lugar de escribir scripts de Powershell para estas tareas. Espero que esto sea útil para alguien.

+0

Eso es puro brillo :) – Korayem

Cuestiones relacionadas