4

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

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

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

因此,如果我更改该文件,我需要进行硬刷新(有时几次)以使浏览器拾取该文件 - 烦人。

有什么办法可以让它像这样渲染:

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

GUID在哪里x(例如始终唯一)。

想法?

我在 ASP.NET MVC 4 上。

4

3 回答 3

4

在按照上面的其他答案对 NuGet 包进行修补之前,现在我最终使用了与测试版 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 帮助程序,它检查是否调试,然后使用上面的 - 否则使用Scripts.Render.

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

于 2012-10-31T00:03:19.390 回答
1

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

我在这里将其作为 codeplex 上的问题提交。

于 2012-10-30T16:58:40.097 回答
0

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

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

BundleTable.Bundles.ApplyHashCache();

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

于 2015-01-11T20:50:21.073 回答