ASP.NET 4.5在调试模式下捆绑 - 陈旧资源

时间:2012-10-29 23:58:24

标签: asp.net-mvc asp.net-4.5 asp.net-optimization bundling-and-minification

有什么办法可以让ASP.NET 4.5 Bundling功能在调试模式下运行时生成GUID作为查询字符串的一部分(例如捆绑关闭)。

问题是在本地开发时,脚本/ CSS文件是这样生成的:

<script type="text/javascript" src="/Content/Scripts/myscript.js" />

因此,如果我更改该文件,我需要进行硬刷新(有时几次)才能让浏览器接收文件 - 这很烦人。

我们有什么办法让它像这样渲染出来:

<script type="text/javascript" src="/Content/Scripts/myscript.js?v=x" />

其中x是GUID(例如,总是唯一的)。

想法?

我在ASP.NET MVC 4上。

3 个答案:

答案 0 :(得分:4)

直到根据上面的其他答案修补NuGet包,现在我最终使用了与beta NuGet包相同的包装代码:

private static IHtmlString JsUnbundled(this HtmlHelper htmlHelper, string bundlePath)
{
    var jsBuilder = new StringBuilder();
    foreach (var file in BundleResolver.Current.GetBundleContents(bundlePath))
    {
        var tagBuilder = new TagBuilder("script");
        tagBuilder.Attributes["src"] = file.AddCacheKey(); // add GUID
        tagBuilder.Attributes["type"] = "text/javascript";
        jsBuilder.AppendLine(tagBuilder.ToString());
    }
    return MvcHtmlString.Create(jsBuilder.ToString());
}

然后我有另一个HTML帮助程序检查是否调试,然后使用上面的 - otherwises使用Scripts.Render

显然,这不会对文件进行任何类型的散列 - 它总是会请求文件。但我不介意这一点,因为它只适用于调试。

答案 1 :(得分:1)

我们目前没有在调试模式下检查文件的内容,但我们可以添加此功能。

我在codeplex here上将其作为问题提交。

答案 2 :(得分:0)

尝试使用HashCache:https://github.com/kemmis/System.Web.Optimization.HashCache

在将所有捆绑包添加到集合后,在BundlesCollection实例上执行ApplyHashCache()扩展方法。

BundleTable.Bundles.ApplyHashCache();

这将在调试模式下向脚本/样式标记输出添加内容哈希值。