【问题标题】:Why does ResolveBundleUrl not work for custom folders? (MVC Beta 4)为什么 ResolveBundleUrl 不适用于自定义文件夹? (MVC 测试版 4)
【发布时间】:2012-03-27 16:51:31
【问题描述】:

从全新的 ASP.NET MVC 4 Beta Web 应用程序中,我正在重新排列我的文件夹以匹配 Rob Conery 的 VidPub.Web example

具体来说,这意味着内容的最终目录结构如下所示

VidPub.Web | - -民众 | |---图片 |--- *.png |---javascripts |--- *.js |---样式表 |----主题 |---基地 |--- 图片 |--- *.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>

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

【问题讨论】:

    标签: asp.net-mvc-4 asp.net-optimization


    【解决方案1】:

    Global.asax.cs 中的Application_Start 下使用BundleTable.Bundles.EnableDefaultBundles(); 而不是BundleTable.Bundles.RegisterTemplateBundles();

    如果您查看RegisterTemplateBundles 的源代码,您会发现它实际上只查找(并添加)特定的 js 和 css 文件。另一方面,EnableDefaultBundles 的作用与您添加自己的捆绑包时几乎相同。

    【讨论】:

    【解决方案2】:

    使用非默认目录时,您似乎必须注册自己的包。我将以下内容添加到 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);
    

    【讨论】:

    • 使用 Microsoft.AspNet.Web.Optimization.1.0.0-beta2new Bundle(..., new CssMinify()) 替换为 StyleBundle 并将 new Bundle(..., new JsMinify()) 替换为 ScriptBundle
    • 使用 Microsoft.AspNet.Web.Optimization.1.0.0-beta2 似乎 AddDirectory 不再是 Bundle 上受支持的方法。那么新的修复方法是什么?
    猜你喜欢
    • 1970-01-01
    • 2019-05-15
    • 2021-12-08
    • 2015-02-22
    • 2019-02-22
    • 2018-07-19
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多