如何让ASP.Net重新编译页面的变化?

时间:2012-12-18 05:16:24

标签: asp.net apache firefox caching mono

我创建了一个aspx页面,并在Firefox和Chrome中查看它,它运行正常,运行C#代码。但是当我对页面进行更改(包括删除所有内容并提供空白页面)时,两个浏览器都会继续显示原始编译的aspx页面!

尽管对aspx文件进行了更改,但ASP.Net(Web服务器)似乎没有重新编译。 让它重新编译的唯一方法是更改​​web.config然后重新启动Web服务器!

我甚至添加了以下代码,但它仍然加载了原始页面:

<script runat="server">
Sub Page_Load
    Random rd = new Random();
    Response.AddHeader("ETag", rd.Next(1111111, 9999999).ToString());
    Response.AddHeader("Pragma", "no-cache");
    Response.CacheControl = "no-cache";
    Response.Cache.SetNoStore();
    Response.Expires = -1;
End Sub
</script>

测试我是否会破坏浏览器缓存:

  1. 创建一个aspx页面并将其加载到firefox中仅(不是在chrome中)
  2. 更改了aspx文件
  3. 在firefox中再次加载aspx但没有得到任何更改
  4. 在Chrome中加载(有史以来第一次),它仍显示旧版本!
  5. 使用Apache和Mono,而不是IIS

3 个答案:

答案 0 :(得分:2)

这似乎是Linux上的Mono + Apache问题。它没有看到已编译的页面的更改。唯一的解决方法是:

  1. 重启Apache网络服务器(这会导致它看到已更改) - 只需大约2秒

  2. 删除“/ tmp / www-data-temp-aspnet-0 /”中的临时文件(这可能有点儿错误,所以#1是更好的选择)

答案 1 :(得分:0)

检查您的Web应用程序是Web Application项目还是Web Site项目。如果它是Web应用程序,则每次更改内容时都需要编译,而网站项目允许在不编译的情况下反映更改。此外,您可以在浏览器中使用Ctrl+F5来获取非缓存的页面副本。希望他的帮助。

阅读详情here

答案 2 :(得分:0)

简答:这是浏览器的错误,它是预期的行为设计。在浏览器中强制缓存刷新(在IE中为Ctrl-F5)。

更正:当它是Mono / Apache堆栈时,不是IIS。然后手动重启可能是唯一的解决方法。在IIS中,当服务器终止空闲进程时,在不活动期间自然会清除过时效果。在Mono中,可能会有或可能没有相同的清洁计划,因此,流程生命周期和配置是第一个需要修复的地方。

不重新编译的行为是由请求页面的复杂标识引起的。身份包括URL,时间戳和会话。如果您尝试在不关闭浏览器的情况下刷新页面,那么ASP服务器将需要提供旧版编译页面的旧版本,因为服务器会尝试维护服务页面与现有会话,视图状态甚至客户端脚本的一致性。此外,浏览器设计为符合缓慢更改的互联网页面,将副本存储在缓存中并保持副本的年龄以跳过不必要的网络旅行。否则互联网会慢10倍。

其他说明:推送ASP服务器的最慢文件是css文件。