asp.net-mvc - 修改后不清除 ASP.NET 包缓存

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

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

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

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

请有任何想法如何诊断或解决此问题?

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

最佳答案

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

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

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

关于asp.net-mvc - 修改后不清除 ASP.NET 包缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19977271/

相关文章:

c# - 如何安全地运行不受信任的第三方代码?

c# - 在 ASP.NET MVC 中使用简单查询

c# - 预定消息

c# - 在 C# MVC 中的单个 Bundle 中添加多个 Bundle

asp.net-mvc-4 - 具有捆绑和缩小功能的 ASP.NET MVC 4 应用程序,为什么在 Debug模式下启用缩小?

asp.net-mvc - 我们可以在 Controller 中添加虚拟 Action 项吗?

asp.net-mvc - 在 ASP.NET MVC 中避免使用路由规则的 Controller

asp.net-mvc-4 - Mvc 4 中的 Sitecore 玻璃映射器通用链接

asp.net-mvc - 如何从MVC WEB API Controller 返回JSON

javascript - 浏览器更喜欢精简的 JS 包吗?