¿Qué efecto tiene la nueva opción de precompilación durante la publicación en las aplicaciones MVC4?


85

Así que recientemente actualicé Visual Studio 2012 a la Actualización 2. Y he aquí, la próxima vez que publique mi aplicación (a través de Archivo Publicar en este caso) me doy cuenta de que hay tres opciones nuevas:

  1. Eliminar todos los archivos existentes antes de publicarlos
  2. Precompilar durante la publicación (con un enlace a Configurar)
  3. Excluir archivos de la carpeta App_Data

La primera y la tercera opciones se explican por sí mismas, pero no puedo encontrar ninguna documentación sobre la segunda opción ya que se aplica a MVC. Cuando lo reviso, no parece haber ningún cambio en los archivos producidos en el sitio y no veo ningún cambio real en el rendimiento.


La ubicación de la función puede ser nueva, pero la función en sí no lo es. Incluso si no considera la compilación de MVC, WebForms son interoperables en un proyecto MVC.
Grant Thomas

Respuestas:


84

El uso del precompilador ASP.NET puede tener el siguiente impacto en su aplicación MVC:

  • Si tiene algo en App_Code, se precompilará en una DLL antes de la implementación. Sin la precompilación, esto sucedería sobre la marcha mediante el tiempo de ejecución de ASP.NET.
  • Si elige la opción para que sus páginas no sean actualizables (es decir, desmarque la primera casilla en el cuadro de diálogo de configuración avanzada), también precompilará sus vistas (ASPX y Razor) en lugar de compilarlas dinámicamente en tiempo de ejecución. La configuración predeterminada (marcada) de "Permitir que el sitio precompilado sea actualizable" le permite actualizar el contenido de la vista sin necesidad de reconstruir todo el proyecto.

Si no tiene ningún archivo en App_Code y desea que su sitio permanezca actualizable, no parece hacer mucho.


7
@Elsimer Sus archivos .cshtml seguirán existiendo, pero si su contenido está precompilado, encontrará su contenido reemplazado por "¡Este es un archivo de marcador generado por la herramienta de precompilación y no debe eliminarse!".
Jimmy

4
Además, las ganancias de rendimiento se encuentran principalmente en el lanzamiento inicial del sitio, cuando el compilador se invoca dinámicamente para cada página. Una vez que la página ha sido visitada una vez (y compilada), el resultado de la compilación se utilizará en las cargas de página posteriores, incluso si no la ha compilado previamente.
Jimmy

15
Un beneficio adicional de NO tener sus páginas actualizadas es que VS encontrará errores de tipo en sus vistas antes de que lleguen a su sitio en vivo.
Chris

4
@Chris, debe reconsiderar su estrategia de prueba si tales errores no se detectan sin la opción de precompilación.
user247702

2
@ AndersLindén: Simplemente pruebe la respuesta real renderizada de las acciones de su controlador. Eso invocará a Razor y, si genera una excepción, fallará la prueba. Sin embargo, esta es también la razón por la que sus puntos de vista deben ser muy ligeros en el código. Realmente no puede hacer pruebas unitarias detalladas en el código de vista como puede hacer en una clase. Es más o menos aprobado o reprobado, e incluso entonces, aprobar solo significa que no generó ninguna excepción, no que realmente hizo lo que se suponía que debía hacer.
Chris Pratt

0

Es una pregunta antigua, pero me encuentro con un problema similar y siento algo que vale la pena compartir.

Mi mensaje de error es el mismo en esta publicación. Mi proyecto es MVC5, construido con Visual Studio 2013 professional. Error de compilación: el tipo 'ASP.global_asax' existe en ambas DLL

En mi caso, con la opción de precompilación, hay un archivo, App_global.asax.dll, en la carpeta bin, y causa el mensaje de error anterior. Primero, elimino App_global.asax.dll en el servidor, reinicio el grupo de aplicaciones, el problema desapareció. Luego probé otro enfoque, desmarque precompilar y volver a publicar, volver a implementar en el servidor, el problema desapareció.

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.