为什么ResolveBundleUrl不适用于自定义文件夹?(MVC Beta 4)

Jed*_*dja 20 asp.net-mvc-4 asp.net-optimization

从一个全新的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>
Run Code Online (Sandbox Code Playgroud)

<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>
Run Code Online (Sandbox Code Playgroud)

在最终的HTML中,我最终没有任何结果.

<link rel="stylesheet" type="text/css" />
<link rel="stylesheet" type="text/css" />
<script></script>
Run Code Online (Sandbox Code Playgroud)

为什么不在新位置拾取文件?

jfi*_*vik 25

根据Application_StartGlobal.asax.cs使用BundleTable.Bundles.EnableDefaultBundles();,而不是BundleTable.Bundles.RegisterTemplateBundles();

如果您查看源代码,RegisterTemplateBundles您可以看到它实际上只查找(并添加)特定的js和css文件.EnableDefaultBundles另一方面,与添加自己的包时几乎相同.


Jed*_*dja 21

在使用非默认目录时,您似乎必须注册自己的包.我添加了以下内容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);
Run Code Online (Sandbox Code Playgroud)

  • 使用_Microsoft.AspNet.Web.Optimization.1.0.0-beta2_,将`new Bundle(...,new CssMinify())`替换为`StyleBundle`和`new Bundle(...,new JsMinify())` `ScriptBundle`. (2认同)