【问题标题】:Visual Studio Express 2012 Web debug randomly not refreshing browser cache with changesVisual Studio Express 2012 Web 调试随机不刷新浏览器缓存并进行更改
【发布时间】:2014-12-10 21:22:32
【问题描述】:

几周以来一直在使用 Visual Studio Express 2012 Web,现在正在学习 JavaScript、HTML5 和 CSS 以用于基于 Web 的应用程序。作为 .NET 开发人员,熟悉 VS 非常好(尽管更好的 JS/HTML 智能感知会很好)而且我的进步很好,但是在调试期间有一个令人讨厌的 VS 怪癖,我无法解决。有时 VS(或者更具体地说是 IE10)会停止识别任何代码更改并运行以前版本的代码。这很烦人,但我可以通过在 IE10 启动时按额外的 F5 来解决它,但它不应该是必需的。我假设更新源时没有刷新 IIS express 的文件缓存,但我可能是错的。在遇到此问题一段时间后,我无法找到一种模式来了解导致问题的使用模式。

还有其他人看过吗?有什么修复吗?网上一搜,一无所获。

我使用 VS 网站项目类型,并在 Windows 8 上安装了 VS 2012 express(使用 IIS express)并使用 IE10 进行调试。

谢谢。

【问题讨论】:

    标签: visual-studio debugging


    【解决方案1】:

    是否有任何使用 Visual Studio Web 的 Web 开发人员找到解决此问题的方法?我发现 Chrome 在确保在代码更改时刷新缓存方面更加可靠,但是通过 IE 和 VS 集成更容易使用 IE 进行开发。

    这一定是通病吧?我也尝试过 IIS Express 和同样的问题(我确信这是浏览器缓存的问题)。通常在第一次运行 IE 时会出现问题,如果我的 Javascript 代码中有一个错误会在绘制屏幕之前中断执行,那将非常痛苦,因为手动清除缓存并不容易。我唯一的解决方法是使用 F12 并“清除该域的浏览器缓存”,然后 F5 刷新。可行但烦人。

    任何解决此问题的提示将不胜感激

    【讨论】:

    • 所以我尝试通过 Windows 8.1 更新到 IE11,看看这个问题是否会消失。如果有的话,现在更糟了! IE11 没有“始终从服务器刷新”选项,唯一让它工作的方法是告诉浏览器始终重新加载网页(通过互联网选​​项 - 所以总是设置很痛苦)。我无法让 HTML 中的任何 META 标记正常工作,但我已经进一步跟踪问题,即来自 JavaScript 的包含或加载的文件是问题并且永远不会重新加载。我不明白为什么 IE 不检查包含文件上的时间戳不同并且不使用缓存
    • 好的,让它工作。问题是当使用 IE 中的自动页面缓存选项(默认)时,IE 不会检查在 javascript 中加载的文件的时间戳。为了完成这项工作,请使用正在加载的 HTML 中的元标记来强制刷新,或者在我将 SVG 文件作为 javascript 中的对象加载的情况下,我扩展了对象类型信息以包含元数据(例如。“图像/svg+xml;缓存控制:无缓存;编译指示:无缓存;最大年龄=0")。我希望这对其他人有所帮助。
    • 更好的方法是将随机查询字符串附加到正在加载的文件的末尾。这会强制浏览器加载新副本,您还可以在代码中插入条件检查,以便在调试模式下运行时代码附加随机查询字符串,但在正常运行时不会进行随机附加,因此您可以获得好处本地缓存。甚至有时这不起作用,尤其是第一次运行应用程序时,所以打开 F12 开发者工具并选择网络——总是从服务器获取文件并清除缓存,然后按 F5 刷新页面。
    【解决方案2】:

    添加这个:

    window.applicationCache.addEventListener('updateready', function (e)
    {
      if (window.applicationCache.status == window.applicationCache.UPDATEREADY)
      {
        window.applicationCache.swapCache();
        if (confirm('A new version of this site is available. Load it?'))
         window.location.reload();
      }
    }, false);
    

    我在网上找到了这个解决方案。对不起,我不记得作者了。当我使用 IE 在 Visual Studio 2012 中使用 JavaScript 调试 Web 应用程序时,它适用于我。 请停止诅咒微软。公平地说,我们都使用他们的产品。 我不在微软工作,但如果没有它的产品,我会很不高兴。我想我们所有人都会。

    【讨论】:

    • 谢谢亚历山大。我会尝试你的代码,看看它是否有效(问题有点断断续续)。已更新至 Win8.1 / RTM IE11,问题较不规律。我已将其确定为在原始页面中加载文件,有时它无法正确获取缓存。起作用的是将随机参数附加到强制重新加载的 URL,尽管您想为生产页面删除它。 iFrame.setAttribute("src", "dashboard.html?xx=" + Math.random());另外,顺便说一句,我并没有诅咒微软,我在微软生态系统中谋生,我认为 VS 很棒!
    【解决方案3】:

    我自己也在使用 Chrome,但仍然遇到同样的问题。最后,我选择了在本地 WebServer 上完全关闭缓存的解决方案 - 作为 VS 的 IIS Express -。这可以通过将0UseMaxAge 添加到web.config 来完成。如下:

    XML
    <configuration>
      ...
        <system.webServer>
          ...
          <staticContent>
            ...
            <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="0.00:00:00" />
          </staticContent>
      </system.webServer>
    </configuration>
    
    笔记
    • 这也适用于常规/完整 IIS。
    • 确保将此设置部署到 PRODUCTION。在那里使用特定于生产的web.config 以允许最终用户利用一些缓存:)。否则,这可能会成为性能杀手。
    • 使用 CTRL+F5 而不仅仅是 F5 也应该刷新它,但不知何故 Chrome v39.0.2171.71 也不起作用米)。我发现它确实可以在同一个浏览器(!)选项卡中直接打开缓存的 Javascript URL,按 Ctrl+F5 然后返回到(HTML)页面并再次使用 CTRL+F5
    • 有时可行的另一个选项是重新启动 IIS Express(右键单击任务栏并从上下文菜单中选择“退出”)。但这也很麻烦.. :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-28
      • 2018-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 2015-01-01
      相关资源
      最近更新 更多