2014-02-25 52 views
1

我一直在使用ASP.NET捆绑和缩小与金块包Microsoft.AspNet.Web.Optimization。ASP.NET捆绑和缩小不产生查询字符串参数

昨天我注意到,我的大部分包文件再也不用在V查询字符串参数其中之一的除外:

/Sgc.Web/bundles/css/JQueryUI

/SGC名.web /捆绑/ CSS/DefaultPage

/Sgc.Web/bundles/js/Menu

/Sgc.Web/bundles/js/DefaultPage

/Sgc.Web/bundl ES/JS/ReportOutputs

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

仍然有查询字符串总是不断产生不同的V PARAM值后,我做就可以改变JS包(如预期)。然而,当我对其css或js文件进行更改时,剩余的包(css或js)会将这些更改合并到一起,但不会再生成v参数值。

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); 
      } 
     } 

如可以从上面的我建立与包超级类而不是StyleBundle或ScriptBundle子类捆中看到。然而,我也尝试使用这两个子类进行捆绑,结果是一样的:所有捆绑包仍然没有v参数,但UnderscoreBackbone捆绑包没有。据我所知,UnderscoreBackbone软件包和剩下的软件包没有什么区别。

我使用,

  • 的Windows 8.1
  • VS保费2013年更新1
  • Microsoft.AspNet.Web.Optimization 1.1.3
  • WebGrease 1.6.0
  • 微软.Web.Infrastructure 1.0.0.0
  • Json.NET(Newtonsoft.Json)6.0.1
  • ANTLRv3 3.5.0.2

有没有人曾经遇到过这样的问题,或有任何提示,我可以在哪里寻找解决方案?

由于提前,

MggLp

+0

尝试摆脱'if(!System.Web.HttpContext.Current.IsDebuggingEnabled)...'并替换为'bundles.Add(新的ScriptBundle'和'bundles.Add(新的StyleBundle'),并且确保任何bundle名称与目录名称不同,使用'〜/ bundles/bundleName'确保没有冲突更安全,并且您的src名称似乎与您的包名称不匹配。 – MikeSmithDev

+0

我用IsDebuggingEnabled做了一些测试,如果注释了+使用StyleBundle和ScriptBundle,但是与上面描述相关的内容没有改变,我还重新安装了新版本的金块包Microsoft.AspNet.Web.Optimization,WebGrease,Json NET和ANTLRv3,但没有运气 –

+0

你怎么做呈现你的包?对于ScriptBundle System.Web.Optimization.Scripts.Render(“〜/ bundles/js/DefaultPage”),对于St yleBundle System.Web.Optimization.Styles.Render(“〜/ bundles/css/JQueryUI”)。渲染方法将生成正确的html标签并包含v。但是,Bundle没有Render,所以我想你使用“Path”来获取URI? –

回答

-1

有时候,在视图中,我们可能会做喜欢的事 -

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

但正确的语法来获得哈希 -

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

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