20

From a brand-new ASP.NET MVC 4 Beta Web Application, I'm re-arranging my folders to match Rob Conery's VidPub.Web example

Specifically, this means that the final directory structure for content looks like this

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

However, when I change the following lines in _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>

to

<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>

I end up with absolutely nothing in the resulting HTML.

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

Why isn't it picking up the files in their new locations?

Hao Kung
  • 28,040
  • 6
  • 84
  • 93
Jedidja
  • 16,610
  • 17
  • 73
  • 112

2 Answers2

25

Under Application_Start in Global.asax.cs use BundleTable.Bundles.EnableDefaultBundles(); instead of BundleTable.Bundles.RegisterTemplateBundles();

If you look at the source for RegisterTemplateBundles you can see that it actually only looks for (and adds) specific js and css files. EnableDefaultBundleson the other hand does pretty much the same as when you add you own bundles.

jfiskvik
  • 635
  • 9
  • 14
  • WOW! Totally life saver... I think I need to add a comment in this post http://dotnet.learningtree.com/2012/03/26/streamlined-web-loading-in-the-visual-studio-11-beta/ to let the author know about this. – Leniel Maccaferri May 18 '12 at 17:20
  • You can read more about this in his blog post: http://blog.degree.no/2012/03/bundling-of-css-and-javascript-in-mvc-4-beta/ – Stian Aug 10 '12 at 08:16
  • Question: Why doesn't it work when you add all your css files to a folder in Content/Themes/default/css ? – Jacques Sep 21 '12 at 08:35
21

It appears you have to register your own bundle when using non-default directories. I added the following to Application_Start and it fixed the problem

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);
Jedidja
  • 16,610
  • 17
  • 73
  • 112
  • 2
    With _Microsoft.AspNet.Web.Optimization.1.0.0-beta2_ you replace `new Bundle(..., new CssMinify())` to `StyleBundle` and `new Bundle(..., new JsMinify())` to `ScriptBundle`. – Douglas H. M. Jun 05 '12 at 19:26
  • 1
    With *Microsoft.AspNet.Web.Optimization.1.0.0-beta2* it seems like AddDirectory is no longer a supported method on Bundle. So what's the new fix? – happyfirst Aug 23 '12 at 20:23