为什么在自定义文件夹中ResolveBundleUrl无法工作?(MVC Beta 4)

20

我正在对全新的ASP.NET MVC 4 Beta Web应用程序进行重新排列文件夹,以匹配Rob Conery的VidPub.Web示例。具体而言,这意味着内容的最终目录结构如下:

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

然而,当我更改_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>

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

最终生成的HTML中什么都没有。

<link rel="stylesheet" type="text/css" />
<link rel="stylesheet" type="text/css" />
<script></script>
为什么它没有在它们的新位置中挑选文件?
2个回答

25

Global.asax.cs文件的Application_Start方法中,使用BundleTable.Bundles.EnableDefaultBundles();代替BundleTable.Bundles.RegisterTemplateBundles();

如果您查看RegisterTemplateBundles源码,您会发现它实际上只寻找(并添加)特定的js和css文件。而EnableDefaultBundles则与您添加自己的bundles时基本相同。


哇!真是救命稻草啊……我想我需要在这篇文章http://dotnet.learningtree.com/2012/03/26/streamlined-web-loading-in-the-visual-studio-11-beta/中添加一条评论,让作者知道这个信息。 - Leniel Maccaferri
您可以在他的博客文章中了解更多信息:http://blog.degree.no/2012/03/bundling-of-css-and-javascript-in-mvc-4-beta/ - Stian
问题:为什么将所有CSS文件添加到Content/Themes/default/css文件夹中后,它不起作用? - Jacques

21

从看起来的情况来看,当使用非默认目录时,您需要注册自己的bundle。我将以下内容添加到Application_Start中,并解决了这个问题。

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
使用 _Microsoft.AspNet.Web.Optimization.1.0.0-beta2_,您可以将 new Bundle(..., new CssMinify()) 替换为 StyleBundle,将 new Bundle(..., new JsMinify()) 替换为 ScriptBundle - Douglas H. M.
1
使用 Microsoft.AspNet.Web.Optimization.1.0.0-beta2,似乎在 Bundle 上 AddDirectory 不再是一种受支持的方法。那么新的解决方案是什么? - happyfirst

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接