有什么办法可以让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上。
答案 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();
这将在调试模式下向脚本/样式标记输出添加内容哈希值。