2008-12-20 20 views
495

Quiero una tarea msbuild para compilar los puntos de vista para que pueda ver si hay errores de tiempo de compilación en tiempo de compilación así .... ¿Algunas ideas?Compilar Vistas en ASP.NET MVC

Respuesta

120

francamente recomendaría el paquete RazorGenerator Nuget. De esta forma, sus vistas tienen un archivo .designer.cs 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 utilizar esta incluir el paquete RazorGenerator Nuget en que proyecto ASP.NET MVC e instalar la extensión "Razor generador" bajo el punto en Herramientas -> Extensiones y actualizaciones

Utilizamos esta y la sobrecarga por compilar con este enfoque es mucho menos. Además de esto, probablemente recomendaría .NET Demon de RedGate, que reduce aún más el impacto del tiempo de compilación.

Espero que esto ayude.

+0

¿hay alguna solución similar para VS2012? – daniel

+3

Desafortunadamente solo admite C# y no VB.Net –

+2

@zoidbergi RazorGenerator funciona con VS2012; cuando se utiliza RazorGenerator.Mvc y RazorGenerator.MsBuild: no es necesaria la extensión. Ver la entrada del blog en [stacktoheap.com] (http://stacktoheap.com/blog/2013/01/19/precompiling-razor-views-in-asp-dot-net-mvc-3/) –

40

Puede utilizar 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/Aplicación/Ruta/O/Ruta/A/IIS/metabase de" es algo como esto: "/MiApl "o" /lm/w3svc2/1/root/ "

también hay un AspNetCompiler Task en MSDN, mostrando 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> 
+3

Esto está desactualizado, vea un extracto del documento readme a continuación. – JarrettV

+0

http://www.luisrocha.net/2011/10/avoiding-mvcbuildviews-build-time.html –

10

próxima versión de ASP.NET MVC (disponible en enero o así) debe tener la tarea de MSBuild que recopila puntos de vista, así que sería bueno que esperar.

Ver announcement

22

Además, si se utiliza ReSharper, puede solución activa ancha Análisis y detectará cualquier error de compilador que pueda tener en los archivos aspx. Eso es lo que hacemos ...

+3

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

+2

I 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 usarlo). – Andrew

+2

@Andrew/@ mookid8000 - R # también detectará errores que el compilador no detectará, como vistas y acciones perdidas/incorrectas. R # reducirá un poco la velocidad de tu PC (me parece bien en un proyecto de gran tamaño con 4 GB de memoria RAM y una CPU de Hyperthreading) 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é que realizar para lograr la misma tarea manualmente. ¡Tu proyecto debe ser enorme! –

513

De la palabra doc readme para RC1 (no indexado por Google)

ASP.NET compilador posterior a la generación Paso

Actualmente, los errores dentro de una ver archivo no se detectan hasta el tiempo de ejecución. Para que pueda detectar estos errores en tiempo de compilación, proyectos ASP.NET MVC incluyen ahora una propiedad MvcBuildViews, que está desactivado por defecto. Para activar esta característica, abra el archivo de proyecto y establecer la propiedad MvcBuildViews true, 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 La activación de esta función añade algo de sobrecarga para el tiempo de construcción.

Puede actualizar los proyectos que se crearon con versiones previas de MVC para incluir la validación en tiempo de compilación de puntos de vista mediante la realización de los siguientes pasos:

  1. Abrir el archivo de proyecto en un editor de texto.
  2. agregue el siguiente elemento bajo el elemento de más arriba <PropertyGroup>: <MvcBuildViews>true</MvcBuildViews>
  3. Al final del archivo de proyecto, quite el elemento <Target Name="AfterBuild"> y modificarlo para que coincida con lo siguiente:
<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'"> 
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" /> 
</Target> 
+25

Si esto no debería funcionar para su proyecto, verifique si no hay un falso en algún lugar de su archivo de proyecto. Estaba anulando el nuevo elemento que agregué encima. –

+0

¿Hay alguna forma de que esto funcione con los formularios web? – mxmissile

+2

@mxmissile: Scott Guthrie recomienda agregar un Proyecto de implementación web a su solución para obtener este tipo de soporte en Proyectos de aplicaciones web: http://weblogs.asp.net/scottgu/archive/2006/09/22/Tip_2F00_Trick_3A00_-Optimizing- ASP.NET-2.0-Web-Project-Build-Performance-with-VS-2005.aspx –

11

No sé qué dispositivo de visualización está utilizando, pero si está usando Razor, es posible que desee consultar la publicación de mi blog: Compile your asp.net mvc Razor views into a seperate dll

También debería ser posible utilizar ese código para otros programas de visualización, pero no lo ha hecho & probado aún

0

Usando Productivity Power Tools ( libre) la extensión de Visual Studio ayuda un poco. Específicamente, la función Solution Error Visualizer. Con él, los errores de compilación se marcaron visualmente en el explorador de soluciones (en el archivo fuente donde se encontró el error). Sin embargo, por alguna razón, esta función no funciona como con otros errores en ningún otro lugar del código.

Con vistas MVC, los errores en tiempo de compilación igualmente aparece subrayada en rojo en sus respectivos archivos .cs, pero señalización de estos errores no se propaga hacia arriba en el Explorador de soluciones (de ninguna manera, ni siquiera en el archivo de origen que contiene)

Gracias por BlueClouds para corregir mi declaración anterior.

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

+0

Probé Productivity Power Tools. Pero no se comporta como lo que se dice aquí. Hay un error en la vista de la navaja pero la construcción es exitosa. las vistas no están marcadas ni subrayadas en rojo, ni en ningún otro lugar del árbol del explorador de soluciones. –

+1

@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. Estoy dejando la respuesta aquí, ya que todavía ayuda un poco, mientras que de hecho no resuelve el problema de manera efectiva. – Veverke

2

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

tecla de acceso directo: Alt + F11

me ayudó a detectar errores de afeitar.

+0

Volví a subir esta respuesta porque la tecla de acceso de hecho expone un error Razor. Sin embargo, posteriormente noté que solo parece funcionar si tiene el archivo .cshtml abierto en el IDE. – Michael12345

Cuestiones relacionadas