我最近回到了一个已经退缩的网站项目。由于重新开始工作,我注意到当应用程序在Visual Studio开发服务器中运行时,css和javascript更改无法被应用程序识别。以前工作正常。我可以更改样式表和javascript并运行应用程序并进行测试。现在,我可以测试应用程序的唯一方法是将它发布到我的本地IIS服务器(虽然我相信重新启动我的电脑也可以解决问题)。
使用Visual Studio 2008(9.0.30729.1)
自从我确定它工作正常以来已经发生变化的是操作系统,从Vista x64家庭高级版到Win 7 x64旗舰版,我已经将项目源从c:移到了d:。虽然我回到了C:同样的负面结果。我还在单独的WCF服务中移出了一些功能,由控制台应用程序(两个服务主机)托管,当网站在调试中启动时,这些服务将被调试。
停止开发服务器什么都不做。 检出(使用VSS 2005)所有文件以确保没有任何内容只读取任何内容。 唯一有效的方法是发布到IIS或重新启动我的机器。两者都不受欢 如果我每次停止调试都需要终止进程,以确保不使用以前的副本,我甚至会感到满意。
任何解决方案?
答案 0 :(得分:30)
服务器可能正在向浏览器发送标头,导致它继续使用缓存副本。测试此问题的简单方法是empty your browser cache。
如果修复它,您需要研究从服务器获得的HTTP headers。您选择的浏览器中的developer tools(a.k.a。F12 tools)将公开服务器返回的标头。然后决定是否要继续使用这些缓存设置(good for speed)或更改它们(good for development)。
你问,你如何调整这些标题?这取决于服务器。以下是常用服务器说明的链接:
答案 1 :(得分:7)
快速方法是在脚本或css文件的src属性之后添加随机参数。 例如
<script type="javascript" src="@Url.Content("~/scripts/myScripts.js?" + DateTime.Now.ToString("ddMMHHmmss")"></script>
因此浏览器将始终采用新文件并且不会缓存。
请确保在实时服务器上部署时删除它。
答案 2 :(得分:0)
尝试使用
<link href"~/Content/Style.css" rel="stylesheet"/>
与捆绑在一起。这对我有用
答案 3 :(得分:0)
如果您始终想要获取js和CSS文件的最新版本,则可以修改StaticFile中间件,例如
app.UseStaticFiles(new StaticFileOptions()
{
OnPrepareResponse = context =>
{
context.Context.Response.Headers.Add("Cache-Control", "no-cache, no-store");
context.Context.Response.Headers.Add("Expires", "-1");
}
});
或者您可以将asp-append-version="true"
添加到文件引用中,例如:
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true"/>