ASP.NET MVC 4捆绑 - DEBUG模式下的单个文件URL

时间:2013-02-14 17:51:52

标签: c# .net asp.net-mvc razor asp.net-mvc-4

问题:

在ASP.NET MVC 4.5中完成的HTML5离线应用程序中,我们使用框架built-in feature捆绑和缩小样式和脚本。一切都适用于页面本身,但是为了写入Cache Manifest,在那里(因为我们正在编写它),它总是只发出捆绑的URL。

因此,我们无法在离线模式下调试JavaScript,因为各个调试js文件没有进入应用程序缓存。

代码:

RegisterBundles

这就是我们的BundleConfig.RegisterBundles外观:

    // For more information on Bundling, visit http://go.microsoft.com/fwlink/?LinkId=254725
    public static void RegisterBundles(BundleCollection bundles)
    {
        bundles.Add(new ScriptBundle("~/bundles/Scripts").Include(
                   "~/Scripts/*.js"
                   ));
    }

HTML标记

我们将_Layout.cshtml包含在页面本身中,如下所示:

@System.Web.Optimization.Scripts.Render("~/bundles/Scripts")

这适用于页面,在debugtrue时发出单独的js文件,在debugfalse时发出一个捆绑文件。

debug=true

中的输出
<script src="/Scripts/ScriptOne.js"></script>
<script src="/Scripts/ScriptTwo.js"></script>
<script src="/Scripts/ScriptThree.js"></script>

debug=false

中的输出
<script src="/bundles/Scripts?v=B0_RvAM_5ifnREcGnNQ3FO8qQp4vyLOdtCUJ-2mXSuA1"></script>

缓存清单

这就是我们将脚本包含在CacheManifest

中的方式
@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/Scripts")

debug=truedebug=false

中的输出
/bundles/Scripts?v=B0_RvAM_5ifnREcGnNQ3FO8qQp4vyLOdtCUJ-2mXSuA1

我们想要什么?

我们想知道是否有办法让Cache-Manifest像这样输出:

debug=true

中的输出
/Scripts/ScriptOne.js
/Scripts/ScriptTwo.js
/Scripts/ScriptThree.js

debug=false

中的输出
/bundles/Scripts?v=B0_RvAM_5ifnREcGnNQ3FO8qQp4vyLOdtCUJ-2mXSuA1

1 个答案:

答案 0 :(得分:7)

The MSDN documentation讨论某种Scripts.RenderFormat方法,它看起来像是做我们想要的事情的好人选。但intellisense抱怨说RenderFormat方法在当前引用的System.Web.Optimization版本中不存在。

但是,再次感谢Google,this answer here on SO正在解释这个RenderFormat方法实际上已包含在下一版本的alpha版本中。 comment on that answer链接到解释我们如何安装它的页面:

PM> Install-Package Microsoft.AspNet.Web.Optimization -Pre

使用此版本,Cache-Manifest可以更改为:

@System.Web.Optimization.Scripts.RenderFormat("{0}","~/bundles/Scripts")

我们现在让缓存清单在debug=true时发出单个文件。

显然,MSDN文档与当前的稳定版本不同步!