我有一个ASP.NET MVC4应用程序(我认为)自从一年前首次发布以来,它一直在使用JavaScript和CSS捆绑。在此期间,我们发布了大量更新,并且没有看到脚本传送出现问题的证据。
但是,通过我们最新的代码部署,我注意到服务的JavaScript不是最新的,并且无论底层脚本内容如何更改,脚本包请求中使用的查询字符串参数都不会更改。
我尝试在Visual Studio中重建解决方案,并验证修改后的脚本文件是否正确部署到服务器。我还明确地回收了IIS应用程序池并重新启动了服务器,但问题仍然存在。
有关如何诊断或解决此问题的任何想法吗?
更新:刚刚比较了登台服务器和生产服务器,我发现行为存在差异。使用Visual Studio Web部署以相同方式部署两个服务器。登台服务器通过更新它在引用脚本包的URL中使用的哈希值,正确并立即反映脚本文件的更改。相反,生产服务器无法更新其捆绑哈希以响应脚本文件修改和/或更改脚本包的组成(即使在重新启动IIS或回收应用程序池之后)。这表明问题与生产IIS环境隔离,并且与我的代码更改或Visual Studio配置无关。
答案 0 :(得分:19)
经过大量的搜索,我最终偶然发现了这个问题的原因。
服务器检测到新部署的JavaScript文件更改失败是由服务器上存在的这些JavaScript文件的一些类似命名的缩小版本引起的。我假设这种行为是设计的,即捆绑过程优先考虑现有的缩小文件并忽略等效的未缩小文件,即使它是较新的。
我无法确切地知道这些少数文件是如何出现在服务器上的,但我认为它们是涉及一些替代形式的缩小/捆绑的实验的结果。无论如何,只需删除它们就可以让捆绑机制看到我部署的脚本文件,一切都开始工作了。
答案 1 :(得分:0)
我认为ASP.NET缓存依赖项和磁盘上的只读文件可能存在问题,您是否可以检查文件是否只在部署环境中读取?