scriptbundle - Aplicación ASP.NET MVC 4 con agrupación y minimización, ¿por qué se habilita la minificación en el modo de depuración?
c# mvc bundle (2)
Acabo de migrar un proyecto ASP.NET MVC 3 a MVC 4 / .NET 4.0, e instalé el paquete NuGet Microsoft.AspNet.Web.Optimization
para admitir el empaquetado y la minificación de CSS y JavaScript. He conseguido que la agrupación / minificación funcione, el problema es que siempre está habilitado. A pesar de que la aplicación está en modo de depuración, como se configura en Web.config, todas las aplicaciones de JavaScript están minimizadas. Como puede ver en el siguiente fragmento de código XML, el modo de depuración está habilitado en Web.config:
<system.web>
<compilation debug="true" targetFramework="4.0">
...
</compilation>
...
</system.web>
Un extracto de mi configuración de paquete:
public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
...
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-1.*",
"~/Scripts/jquery.form.js",
"~/Scripts/jquery.format.js"));
bundles.Add(new StyleBundle("~/Content/css").Include(
"~/Content/Site.css"));
...
}
}
Las CSS / JavaScript incluidas se representan en el HTML como por ejemplo:
<link href="/content/css" rel="stylesheet" type="text/css">
<script src="/bundles/jquery" type="text/javascript"></script>
¿Alguien tiene alguna idea de por qué se habilita la minificación en mi caso? Estoy en una pérdida en cuanto a lo que me estoy perdiendo aquí. Para solucionar problemas, creé una aplicación de Internet ASP.NET MVC 4 de prueba y pude verificar que CSS / JavaScript no se minimizó en el modo de depuración para este proyecto.
EDITAR:
En mi archivo _Layout.cshtml renderizo los estilos / scripts como este:
@Styles.Render("content/css")
@Scripts.Render("bundles/jquery")
Gracias a Hao, me doy cuenta de que he olvidado prefijar los nombres de los paquetes con "~ /".
Acabo de suceder esto en un nuevo proyecto MVC de ASP.NET. Tuve que <compilation debug="true" targetFramework="4.5.1" />
configuró como verdadero en web.config y aún obtenía una salida minificada.
La solución
BundleConfig.cs (en App_Start) tiene una línea en la parte inferior BundleTable.EnableOptimizations = true;
que estaba anulando mi configuración web.config ....
Quite la línea y / o ajústelo a falso y obtuve mis scripts como no minados / desagregados según lo deseado en el entorno de depuración.
Recomiendo eliminar la línea ya que esto anulará web.config. Establecer esto en web.config tiene la ventaja de usar las transformaciones web.config para que pueda crear diferentes configuraciones para la implementación en diferentes entornos.
Para obtener más información sobre este tema, consulte http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification y lea la sección Control de empaquetado y minificación (aproximadamente a la mitad del artículo).
La bandera roja está con las etiquetas de enlace / script representadas en su HTML:
Estos deben contener un código hash de la versión si está utilizando Script / Style.Render, es decir,
< script src="/bundles/jquery?v=wvLq7H7qEZB2giyIRn7aEZAxhHOb2RfTYYh2HMd9EqM1"/>
Para obtener el comportamiento de depuración / liberación que utilizan las plantillas MVC4, también debe usar los métodos Script / Style.Render. Al llamar a estos métodos, debe pasar rutas de paquetes virtuales, en su ejemplo:
@Styles.Render("~/content/css")
@Scripts.Render("~/bundles/jquery")
En el modo de depuración, no debe obtener etiquetas de enlace / secuencia de comandos que apunten al paquete (que siempre estarán minimizadas / agrupadas). En su lugar, debería obtener etiquetas de script / enlace para los recursos individuales en el modo de depuración.