ASP.NET捆绑和缩小不生成查询字符串参数

时间:2014-02-25 10:53:49

标签: asp.net bundling-and-minification

我一直在使用ASP.NET捆绑和缩小与mugget包Microsoft.AspNet.Web.Optimization。

昨天我注意到我的大多数捆绑文件不再具有v查询字符串参数,但其中一个除外:

/Sgc.Web/bundles/css/JQueryUI

/Sgc.Web/bundles/css/DefaultPage

/Sgc.Web/bundles/js/Menu

/Sgc.Web/bundles/js/DefaultPage

/Sgc.Web/bundles/js/ReportOutputs

/Sgc.Web/bundles/js/UnderscoreBackbone?v=4YsZ6DBVserabs64GE87Ua4d51aeg0D1wXHWNe3E6NU1

仍然具有查询字符串的JS包在我对其进行更改后始终会生成不同的v param值(如预期的那样)。但是当我对他们的css或js文件进行更改时,其余的包(css或js)会包含这些更改,但不再生成v param值。

执行捆绑的C#代码:

// -- create and add CSS bundles without minification
  BundleTable.EnableOptimizations = true;

  bundles.Add(new Bundle("~/bundles/css/JQueryUI").Include(
               "~/Styles/Gui/jquery-ui-1.10.4-custom.css",
               "~/Styles/Gui/jquery-ui-custom.css",
               "~/Styles/Gui/jquery.ui.combogrid.css"));

  bundles.Add(new Bundle("~/bundles/css/DefaultPage").Include(
               "~/Styles/Default.css",
               "~/Content/toastr.min.css"));   

  // -- create and add JS bundles without minification
  bundles.Add(new Bundle("~/bundles/js/DefaultPage").Include(
                "~/Scripts/Defaults.js",
                "~/Scripts/toastr.min.js"));

  bundles.Add(new Bundle("~/bundles/js/Menu").Include(
                "~/Scripts/Gui/Menus/SuperFish/jquery.hoverIntent.r7.min.js",
                "~/Scripts/Gui/Menus/SuperFish/superfish1_7_4.min.js",
                "~/Scripts/Gui/Menus/SuperFish/factory.js"));

  bundles.Add(new Bundle("~/bundles/js/UnderscoreBackbone").Include(
                "~/Scripts/underscore.min.js",
                "~/Scripts/backbone.min.js"));

  bundles.Add(new Bundle("~/bundles/js/ReportOutputs").Include(
                "~/Scripts/Gui/jquery-visibility.js",
                "~/Scripts/UserControls/ReportOutputs.js"));

  //-- if in Release mode, then minify all the bundles
  if (!System.Web.HttpContext.Current.IsDebuggingEnabled)
  {
      CssMinify cssMinify = new CssMinify();
      JsMinify jsMinify = new JsMinify();

      foreach (Bundle bundle in bundles)
      {
          if (bundle.Path.Contains("/js"))
          {
              bundle.Transforms.Add(jsMinify);
          }
          else
          {
              bundle.Transforms.Add(cssMinify);
          }
      }

从上面可以看出,我正在使用Bundle超类而不是StyleBundle或ScriptBundle子类构建bundle。但是我也尝试使用这两个子类进行捆绑,结果是相同的:除了UnderscoreBackbone捆绑包之外,所有捆绑包仍然没有v param。据我所知,UnderscoreBackbone捆绑包的制作方式和剩余的捆绑包没有区别。

我正在使用,

  • Windows 8.1
  • VS Premium 2013 with Update 1
  • Microsoft.AspNet.Web.Optimization 1.1.3
  • WebGrease 1.6.0
  • Microsoft.Web.Infrastructure 1.0.0.0
  • Json.NET(Newtonsoft.Json)6.0.1
  • ANTLRv3 3.5.0.2

有没有人曾经遇到过这类问题,或者有任何暗示我在哪里寻找解决方案?

提前致谢,

MggLp

1 个答案:

答案 0 :(得分:-1)

有时,在观看中,我们可能会做类似的事情 -

Scripts.Render("/bundles/js/Default‌​Page")

但获取哈希的正确语法 -

Scripts.Render("~/bundles/js/Default‌​Page").

这可能是绝对和相对路径的问题。 使用~,我们可以获取捆绑文件的查询字符串。