2012-03-10 14 views
20

Desde un ASP.NET MVC 4 Beta aplicación Web de nueva construcción, que estoy reorganizando mis carpetas para que coincida con Rob Conery VidPub.Web example¿Por qué ResolveBundleUrl no funciona para carpetas personalizadas? (MVC Beta 4)

En concreto, esto significa que la estructura de directorios definitiva para las miradas de contenido como esto

 
VidPub.Web 
| 
---Public 
    | 
    |---Images 
      |--- *.png 
    |---javascripts 
      |--- *.js 
    |---stylesheets 
     |----themes 
       |---base 
        |--- images 
        |--- *.css 
     |----site.css 

Sin embargo, cuando cambio las siguientes líneas en _Layout.cshtml

<link href="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl(
      "~/Content/css")" 
      rel="stylesheet" 
      type="text/css" /> 

<link href="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl(
      "~/Content/themes/base/css")" 
      rel="stylesheet" 
      type="text/css" /> 

<script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl(
      "~/Scripts/js")"></script> 

a

<link href="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl(
      "~/Public/stylesheets/css")" 
      rel="stylesheet" 
      type="text/css" /> 

<link href="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl(
      "~/Public/stylesheets/themes/base/css")" 
      rel="stylesheet" 
      type="text/css" /> 

<script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl(
      "~/Public/javascripts/js")"></script> 

No tengo absolutamente nada en el HTML resultante.

<link rel="stylesheet" type="text/css" /> 
<link rel="stylesheet" type="text/css" /> 
<script></script> 

¿Por qué no está recogiendo los archivos en sus nuevas ubicaciones?

Respuesta

25

Bajo Application_Start en Global.asax.cs uso BundleTable.Bundles.EnableDefaultBundles(); en lugar de BundleTable.Bundles.RegisterTemplateBundles();

Si nos fijamos en la fuente de RegisterTemplateBundles se puede ver que en realidad sólo busca (y agrega) archivos js y css específicos. EnableDefaultBundles por el contrario, hace más o menos lo mismo que cuando agrega sus propios paquetes.

+1

exactamente lo que necesito. Gracias. – ashraf

+0

¡WOW! Totalmente salvavidas ... Creo que necesito agregar un comentario en esta publicación http://dotnet.learningtree.com/2012/03/26/streamlined-web-loading-in-the-visual-studio-11-beta/para que el autor sepa sobre esto. –

+1

esta es una mejor opción que la respuesta aceptada. Gracias. –

21

Parece que tiene que registrar su propio paquete cuando usa directorios no predeterminados. He añadido lo siguiente a Application_Start y se solucionó el problema

var bundle = new Bundle("~/Public/stylesheets/css", new CssMinify()); 
bundle.AddDirectory("~/Public/stylesheets", "*.css", true); 
BundleTable.Bundles.Add(bundle); 

bundle = new Bundle("~/Public/javascripts/js", new JsMinify()); 
bundle.AddDirectory("~/Public/javascripts", "*.js", true); 
BundleTable.Bundles.Add(bundle); 
+2

Con _Microsoft.AspNet.Web.Optimization.1.0.0-beta2_ reemplace 'new Bundle (..., new CssMinify())' por 'StyleBundle' y' new Bundle (..., new JsMinify()) 'a' ScriptBundle'. –

+1

Con * Microsoft.AspNet.Web.Optimization.1.0.0-beta2 * parece que AddDirectory ya no es un método compatible en Bundle. ¿Cuál es la nueva solución? – happyfirst

Cuestiones relacionadas