15

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

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

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

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

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

4

2 回答 2

19

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

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

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

于 2013-11-15T17:55:54.673 回答
0

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

于 2013-11-14T20:04:31.373 回答