Asp.net mvc 是否将缓存buster添加到非优化捆绑包?

Asp.net mvc 是否将缓存buster添加到非优化捆绑包?,asp.net-mvc,caching,bundling-and-minification,Asp.net Mvc,Caching,Bundling And Minification,我在MVC中使用捆绑,并具有以下特性: @Scripts.Render("~/bundles/scripts.js"); 当BundleTable.EnableOptimizations=true时呈现为: <script src="/bundles/scripts.js?v=RF3ov56782q9Tc_sMO4vwTzfffl16c6bRblXuygjwWE1"></script> <script src="/js/header.js"></sc

我在MVC中使用捆绑,并具有以下特性:

@Scripts.Render("~/bundles/scripts.js");
BundleTable.EnableOptimizations=true时
呈现为:

<script src="/bundles/scripts.js?v=RF3ov56782q9Tc_sMO4vwTzfffl16c6bRblXuygjwWE1"></script>
<script src="/js/header.js"></script>
<script src="/js/content.js"></script>
<script src="/js/footer.js"></script>
是否可以截取非优化版本以包含我自己的自定义缓存buster

例如:

<script src="/js/header.js?v=12345"></script>
<script src="/js/content.js?v=12345"></script>
<script src="/js/footer.js?v=12345"></script>

您为什么需要这样做?在开发中,
BundleTable.EnableOptimizations=false
无论如何都不会缓存任何内容,而在生产中,您应该拥有
BundleTable.EnableOptimizations=true
也不需要这样的东西


简而言之,答案是否定的,没有任何内置功能可以让你做你想做的事情,主要是因为我已经说过的原因:根本不需要这样的功能。

这里有一个深入的解决方案,可以解决你要找的问题:

<script src="/js/header.js?v=12345"></script>

要总结缓存破坏部分,请创建一个实用程序方法,该方法将连接要缓存的非优化文件的文件创建时间戳

例如

这将产生您想要的:

<script src="/js/header.js?v=12345"></script>

可能重复感谢克里斯,我有一个配置,能够禁用生产优化。它基本上是一种快速的回退,以防优化部署会导致任何意外问题。在这种情况下,我希望保留现有的缓存buster。我想我需要创建自己的自定义mvc助手来完成这项工作。再次感谢。@Chris:
BundleTable.EnableOptimizations=false无论如何都不会缓存任何内容
,但客户端是否仍会缓存对静态js和css文件的请求?如果客户端有一个同名的旧文件,它将不会访问服务器。这不是版本查询参数应该通过破坏缓存来解决的问题,还是我错了?@KyleMit:这句话的关键是“在开发中”。IIS Express发送头,告诉客户端不要缓存资源,因为它正在开发中。虽然这是真的,但客户端可以忽略这一点,并以任何方式进行缓存,所有浏览器都非常忠实地遵守服务器的缓存请求。Chrome将捆绑结果缓存在Dev中,其中BundleTable.EnableOptimizations=false。因此,你是不正确的。传闻证据!=证明。我也在开发中运行Chrome,我的资源不会被缓存。此外,也没有“BundleTable.EnableOptimizations=false”这样的东西。资源没有绑定到dev中,因此如果您看到绑定的资源,那么您要么在发布配置中运行,要么没有将EnableOptimizations设置为false。