Javascript 强制客户端浏览器重新下载我们的asp.net web应用程序的优雅方式';css和.js文件(不完全禁用缓存)

Javascript 强制客户端浏览器重新下载我们的asp.net web应用程序的优雅方式';css和.js文件(不完全禁用缓存),javascript,asp.net,css,caching,iis,Javascript,Asp.net,Css,Caching,Iis,我们的asp.net web应用程序允许客户端浏览器缓存我们的(大型).css和.js文件,以提高性能 但是,每当我们部署新版本时,我们都会接到用户的电话,询问页面看起来有多凌乱,并且充满了javascript错误。事实证明,他们的浏览器没有重新下载更改后的.css和.js文件。Ctrl-F5总是会修复它 有没有办法在升级部署后强制重新下载,而不将其设置为不缓存(从而降低应用程序的速度) 我发现了这一点(在每次部署时手动更改对每个文件的引用): 这是(在每次页面加载时都会进行校验和计算):

我们的asp.net web应用程序允许客户端浏览器缓存我们的(大型).css和.js文件,以提高性能

但是,每当我们部署新版本时,我们都会接到用户的电话,询问页面看起来有多凌乱,并且充满了javascript错误。事实证明,他们的浏览器没有重新下载更改后的.css和.js文件。Ctrl-F5总是会修复它

有没有办法在升级部署后强制重新下载,而不将其设置为不缓存(从而降低应用程序的速度)

我发现了这一点(在每次部署时手动更改对每个文件的引用):

这是(在每次页面加载时都会进行校验和计算):


但肯定还有比这更合理的解决方案…?

在文件中设置版本号对我们来说很好:

<script type="text/javascript" src="somefile.js?v=1.0"></script>

只要您在每次“发布”时更改版本号,浏览器就会认为它是一个新文件


只需在全局文件(比如配置文件或其他文件)中设置一个版本号,然后在每个脚本/css标记上设置所需的变量,就可以做到这一点

在文件中设置版本号对我们很有用:

<script type="text/javascript" src="somefile.js?v=1.0"></script>

只要您在每次“发布”时更改版本号,浏览器就会认为它是一个新文件

只需在全局文件(比如配置文件或其他文件)中设置一个版本号,然后在每个脚本/css标记上设置所需的变量,就可以做到这一点


最好的方法是在文件名中使用版本控制。如果您使用像VSN、微软Team Foundation等的代码版本化,那么您可以使用最后签入号作为文件名后缀,例如,假设当前签入号为1321(或者您也可以使用时间戳<强> YDYY MM DD HH MM < /强> IE>2015-01-1517-15< <强> >

所以 somefile.js将变成somefile_v1321.js 或 somefile.js将变成somefile_v2015-01-15-17-15.js

现在,您会想知道这里发生了这么多文件名更改。答案是,如果您的发布非常频繁,那么考虑使用脚本语言,如Ant脚本,它可以在发布文件中更改JS和CSS导入文件名。 每次进行新的部署时,资源都会有一个新的统一路径,该路径对于浏览器是唯一的,因此它将进行新的加载。
最好的方法是在文件名中使用版本控制。如果您使用像VSN、微软Team Foundation等的代码版本化,那么您可以使用最后签入号作为文件名后缀,例如,假设当前签入号为1321(或者您也可以使用时间戳<强> YDYY MM DD HH MM < /强> IE>2015-01-1517-15< <强> >

所以 somefile.js将变成somefile_v1321.js 或 somefile.js将变成somefile_v2015-01-15-17-15.js

现在,您会想知道这里发生了这么多文件名更改。答案是,如果您的发布非常频繁,那么考虑使用脚本语言,如Ant脚本,它可以在发布文件中更改JS和CSS导入文件名。
每次进行新的部署时,资源都会有一个新的统一路径,这对浏览器来说是唯一的,因此它会进行新的加载。这会起作用,但我有一些不同的母版页,其中有十几个链接,这似乎是相当多的工作,而且在所有其他部署任务中很容易忘记。肯定有更好的办法吗?ASP.NET或IIS中的设置更改。。。?IE不会完全忽略的http头…?不幸的是,我不知道有任何其他解决方案可以这样工作。您希望缓存它,但仅当您更新时。如果该文件没有相应的版本,那么您就无能为力。我想你可以在初始加载后设置一个cookie,如果存在,可以绕过任何缓存头或类似的内容,但是如果你设置正确,应该很容易在每个部署中按照我上面提到的方式进行。我正在使用的Java应用程序被设置为读入从SVN修订版检索的变量,因此一旦我们部署,它总是有一个新的版本号,我们不需要做任何更改。当我实现这个解决方案时,我发现Chrome每次刷新都会加载一个新版本的CSS,即使版本号从未更改。如果数字发生变化,它不应该只获得最新版本吗?听起来像是Chrome中的设置或bug。它应该缓存每个脚本的版本号。这将起作用,但我有一些不同的母版页,其中有十几个链接,这似乎是相当多的工作,在所有其他部署任务中很容易忘记。肯定有更好的办法吗?ASP.NET或IIS中的设置更改。。。?IE不会完全忽略的http头…?不幸的是,我不知道有任何其他解决方案可以这样工作。您希望缓存它,但仅当您更新时。如果该文件没有相应的版本,那么您就无能为力。我想你可以在初始加载后设置一个cookie,如果存在,可以绕过任何缓存头或类似的内容,但是如果你设置正确,应该很容易在每个部署中按照我上面提到的方式进行。我正在使用的Java应用程序被设置为读入从SVN修订版检索的变量,因此一旦我们部署,它总是有一个新的版本号,我们不需要做任何更改。当我实现这个解决方案时,我发现Chrome每次刷新都会加载一个新版本的CSS,即使版本号从未更改。如果数字发生变化,它不应该只获得最新版本吗?听起来像是Chrome中的设置或bug。它应该用版本号缓存每个脚本。您找到的解决方案是什么?你能发帖吗?你找到了什么解决方案?你能帮我吗