【问题标题】:ASP.NET bundle cache not clearing after modifications修改后未清除 ASP.NET 包缓存
【发布时间】:2013-11-14 12:09:19
【问题描述】:

我有一个 ASP.NET MVC4 应用程序,自一年前首次发布以来,它(我认为)一直与 JavaScript 和 CSS 捆绑一起正常工作。在此期间,我们发布了许多更新,并且没有发现脚本交付存在问题的证据。

但是,在我们最新的代码部署中,我注意到提供的 JavaScript 不是最新的,并且脚本包请求中使用的查询字符串参数不会改变,无论底层脚本内容如何更改。

我已尝试在 Visual Studio 中重新构建解决方案,并验证修改后的脚本文件是否已正确部署到服务器。我也显式回收了IIS应用程序池并重启了服务器,但问题依旧。

请问有什么方法可以诊断或解决这个问题吗?

更新:刚刚比较了暂存服务器和生产服务器,我注意到行为有所不同。使用 Visual Studio Web 部署以相同的方式部署两台服务器。登台服务器通过更新它在引用脚本包的 URL 中使用的哈希值,正确并立即反映对脚本文件的更改。相反,生产服务器无法更新其捆绑散列以响应脚本文件修改和/或脚本捆绑组合的更改(即使在重新启动 IIS 或回收应用程序池之后)。这表明该问题与生产 IIS 环境无关,与我的代码更改或 Visual Studio 配置无关。

【问题讨论】:

  • 您最初检查过这不是缓存问题吗?您没有提供太多详细信息,您是否确认捆绑包包含您期望的脚本并且没有重复?
  • 我仍然会检查这是否不仅仅是一些“用户错误”。捆绑与 MVC 并不真正相关 - 这是另一个 MS 组件。我最近也将它与winforms一起使用。一切都像魅力一样。
  • @James:如果您能建议我应该寻找什么,我很乐意提供更多详细信息。我不确定如何检查它是否是缓存问题。我已经确认对捆绑请求的 HTTP 响应包含旧版本的脚本(缩小形式)。我还应该在哪里寻找,我应该寻找什么?
  • @Agat:我同意,直到现在它对我也很有效。但是,这不是用户错误。我亲眼看到响应捆绑请求而交付的脚本没有数据。更重要的是,当脚本内容发生变化时,请求查询字符串也不会更新。

标签: asp.net-mvc asp.net-mvc-4 bundling-and-minification


【解决方案1】:

经过大量搜索,我最终偶然发现了这个问题的原因。

服务器未能检测到对 JavaScript 文件新部署的更改是由服务器上存在的这些 JavaScript 文件的一些类似名称的缩小版本引起的。我认为这种行为是设计使然,即捆绑过程优先考虑现有的缩小文件并忽略等效的未缩小文件,即使它较新。

我不能确定这几个缩小文件究竟是如何出现在服务器上的,但我认为它们是涉及某种替代形式的缩小/捆绑的实验的结果。无论如何,只需删除它们,捆绑机制就可以看到我部署的脚本文件,一切都开始工作了。

【讨论】:

  • 我遇到了这个问题,因为我安装了 Web Essentials,后来又禁用了它——旧的缩小文件被闲置着,只被发布版本使用。
  • 遇到了同样的问题,很高兴找到这篇文章!
  • 如果您的缩小文件不是解决方案的一部分并且您在解决方案资源管理器中花费大量时间,则很容易陷入此陷阱。
【解决方案2】:

我认为 ASP.NET 缓存依赖项和磁盘上的只读文件可能存在问题,您能否检查一下您的文件最终在部署环境中是否为只读?

【讨论】:

  • 感谢您的建议。其实我最终找到了这个问题的原因,我会记录下来作为答案。
猜你喜欢
  • 1970-01-01
  • 2018-10-09
  • 2018-06-04
  • 1970-01-01
  • 2017-02-03
  • 2022-01-20
  • 1970-01-01
  • 2022-11-18
  • 1970-01-01
相关资源
最近更新 更多