script net mvc minification example bundling bundleconfig asp and c# css .net asp.net-mvc bundling-and-minification

c# - net - El paquete no funciona en MVC5 cuando enciendo el modo de liberación



bundles asp net mvc 4 (6)

Después de luchar contra este problema durante varias horas, te recomiendo que pruebes esto también:

  1. Agregue esto al comienzo de la vista que está utilizando su paquete:

    @ {BundleTable.EnableOptimizations = true; }

  2. Restablecer IIS

  3. Recarga tu página y comprueba si minify funciona

En mi caso, en algún lugar de mi solución estaba cambiando "BundleTable.EnableOptimizations" de verdadero a falso. Cuando lo obligo a VERDADERO justo antes de que se use el paquete, funcioné.

Después de que noté que funciona, lo moví a un método estático en mi clase BundleConfig:

public static void EnableOptimizations() { #if DEBUG BundleTable.EnableOptimizations = false; #else BundleTable.EnableOptimizations = true; #endif }

Así que puedo llamarlo desde la vista y tenerlo minimizado para desarrolladores.

@{ BundleConfig.EnableOptimizations(); }

Tengo el siguiente paquete configurado en BundleConfig.cs:

bundles.Add(new StyleBundle("~/bundles/css").Include( "~/assets/bootstrap/css/bootstrap.css", "~/assets/css/global/all.css"));

y lo remito usando lo siguiente:

@Styles.Render("~/bundles/css")

Cuando estoy en el modo de depuración (web.config compilation debug="true" ) funciona como se espera, ya que procesa ambos archivos css de manera normal, es decir:

<link href="/assets/bootstrap/css/bootstrap.css" rel="stylesheet"/> <link href="/assets/css/global/all.css" rel="stylesheet"/>

Sin embargo, cuando configuro debug="false" el comportamiento anterior todavía se produce porque reconoce los archivos, sin embargo, simplemente los muestra como normales.

Para confirmar que el empaquetado puede funcionar definitivamente, he habilitado las optimizaciones en BundleConfig, es decir, BundleTable.EnableOptimizations = true;

Cada vez que hago lo anterior, agrupa el css y aparece como se espera, es decir:

<link href="/bundles/css?v=WBKHkZAJly7jUzHrVDT8SwfaQE-CA9dbOUQUlLKadNE1" rel="stylesheet"/>

EDITAR:

Algunas personas han mencionado que agregar el siguiente código a mi archivo BundleConfig.cs logrará lo que busco:

#if DEBUG BundleTable.EnableOptimizations = false; #else BundleTable.EnableOptimizations = true; #endif

Entiendo y aprecio esta respuesta; sin embargo, de acuerdo con la documentación, el comportamiento predeterminado de la agrupación de MVC es agrupar en modo de lanzamiento pero no en modo de depuración. No veo por qué debería tener que agregar código adicional para que haga esto cuando ya debería estarlo.

Editar 2

Tengo una confesión que hacer. Resulta que tuve el archivo web.config de la carpeta Vistas abierto y no el archivo web.config principal. Cambié la configuración en el web.config principal y esto funciona bien para mí. Culpo a ReSharper



La forma en que puedo BundleConfig esto es forzarlo en el BundleConfig para que haga exactamente lo que quiero que haga. No creo que MVC4 tuviera las mismas opciones con el archivo de configuración (o simplemente nunca las hice funcionar).

Así que esto es lo que tengo al final de mi método RegisterBundles:

#if DEBUG BundleTable.EnableOptimizations = false; #else BundleTable.EnableOptimizations = true; #endif

De esta manera siempre está ahí, para ver. Sin embargo, debe recordar poner eso allí cuando esté iniciando el proyecto, pero eso no es un gran problema.

Si no está familiarizado con estos, el #if DEBUG es una directiva de preprocesador que le dice al CLR que haga lo que está en ese bloque cuando el parámetro de compilación DEBUG está presente (solo debería estar presente en el modo DEBUG, aunque eso puede cambiarse las propiedades del proyecto). Si esa variable no está presente (modo Liberar, o cualquier otro modo), entonces hará el otro bloque.


La transformación predeterminada de la versión Web.config elimina el atributo de depuración así:

<compilation xdt:Transform="RemoveAttributes(debug)" />

Sin embargo, esto no hará que se produzca el comportamiento de agrupamiento esperado. En su lugar, debe crear una transformación que literalmente establezca el atributo de depuración en "falso", así:

<compilation debug="false" xdt:Transform="SetAttributes" />


Otro problema posible es que dentro de su archivo Global.asax.cs en el método Application_Start() , le falta la llamada a su BundleConfig .

Por ejemplo, suponiendo que su método usa el nombre predeterminado RegisterBundles(BundleCollection bundles) luego dentro de su archivo Global.asax.cs , querrá agregar BundleConfig.RegisterBundles(BundleTable.Bundles); en el método Application_Start() .

Por lo tanto, su archivo Global.asax.cs podría tener este aspecto:

using System; using System.Collection.Generic; using System.Linq; using System.Web; using System.Http; using System.Mvc; using System.Routing; using System.Optimization; namespace MyProject { public class MvcApplication : System.Web.HttpApplication { AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); // ** This line right below might be what you are missing ** BundleConfig.RegisterBundles(BundleTable.Bundles); } }


Tuve este problema cuando cambié la carpeta css. Mi problema fue que cambié el archivo BundleConfig para archivos css:

BundleConfig.cs:

bundles.Add(new StyleBundle("~/Content/css").Include( "~/Content/css/bootstrap.css", ....

Vistas incluidas:

@Styles.Render("~/Content/css")

Por alguna razón, esto no funcionó. ''paquetes'' parece ser una palabra clave o algo (no estoy seguro). Debes dejarlo de esta manera:

bundles.Add(new StyleBundle("~/bundles/css").Include( "~/Content/css/bootstrap.css", ...

Puntos de vista:

... @Styles.Render("~/bundles/css") ...

No tengo necesidad de modificar ''BundleTable.EnableOptimizations'' ni web.config ni ninguna otra cosa.

Espero que esto ayude a alguien.