【问题标题】:Prevent Silverlight 3 from caching while debugging防止 Silverlight 3 在调试时缓存
【发布时间】:2009-11-22 04:20:09
【问题描述】:

我假设我遇到的问题与缓存有关。当我调试时,我所做的代码更改没有被采纳。大多数情况下,我会收到以前版本的应用程序。如何防止这种情况发生?

【问题讨论】:

  • 您在 Visual Studio 中运行的调试情况如何?解决方案中是否有测试网站?您在哪个浏览器中托管 SL?
  • 你好,这个麦克风打开了吗? ...您对此问题有 4 票赞成,但您没有回复我上面的问题,也没有回复任何花时间尝试回答您的问题的人。

标签: silverlight silverlight-3.0


【解决方案1】:

Ctrl+F5 是一种刷新页面并同时清除该页面缓存的简单方法 - 它可能会有所帮助:)

【讨论】:

    【解决方案2】:

    尝试在 Page_Load 上添加到承载 Silverlight 应用程序的页面:

          Response.Cache.SetExpires(DateTime.Now.AddSeconds(-100));
          Response.Cache.SetCacheability(HttpCacheability.NoCache);
    

    【讨论】:

      【解决方案3】:

      将“版本”查询字符串附加到您的 XAP 网址,例如:

      http://localhost:1234/ClientBin/my_silverlight_app.xap?v=1.0.287.5361
      

      这将欺骗浏览器(和许多 Web 服务器)认为这是一个不同的文件。并且当缓存问题再次出现时,增加数量。

      如果您想使用适当的缓存,请使用OutputCache 指令在服务器端进行。

      【讨论】:

        【解决方案4】:

        据我所知,这似乎是 Firefox 的问题 - 当我使用 IE8 时,这并没有发生在我身上(我意识到这可能会打开它自己的蠕虫罐,但至少对于调试和测试 Silverlight , IE 好很多)

        【讨论】:

          【解决方案5】:

          我没有遇到任何关于 Silverlight 程序集被缓存的问题 - 您可能想尝试调试来回的 HTTP 请求,看看您的服务器是否向浏览器返回了不正确的信息(例如“未修改”响应)。

          对于一般的无缓存行为,我发现唯一可靠的方法是关闭浏览器中的缓存。

          对于 IE,这是唯一可靠的选择 - 否则,即使发送了正确的无缓存标头,某些内容仍会被缓存(特别是通过 Javascript XmlHttpRequest 访问的动态加载的资源)。不过,我并没有特别遇到 Silverlight 不应该被缓存的问题 - 即使启用了缓存,IE 也总是加载最新的更新。

          Firefox 的问题要多得多——即使禁用缓存,它有时仍会缓存 XmlHttpRequest 加载的资源。在这种情况下,手动点击几次刷新是唯一的解决方案。再一次,我对 Silverlight 程序集没有任何问题,即使打开了缓存。

          【讨论】:

            【解决方案6】:

            在 Firefox 中,我使用“网络开发者”插件并简单地选择“禁用缓存”。工作正常。

            【讨论】:

            • 我无法将这一点告诉我网站的每个用户,所以我为每个人提供了更好的解决方案。
            • 这仅用于调试。您无需告诉网站的每个用户,这也会破坏其他用户的缓存实现。
            • 我们不希望在发布新版本时缓存旧版本,不存在破解问题。
            【解决方案7】:

            工具下的 Firefox 3.5 有隐私浏览选项。单击以禁用缓存。

            【讨论】:

              【解决方案8】:

              这是我为 flex/flash 和 silverlight 做的,它可以工作。

              ASPX 或 CSHTML 背后的代码

              string slUrl = "/ClientBin/MySilverlight.xap";
              
              string filePath = Server.MapPath(slUrl);
              
              FileInfo info = new FileInfo(filePath);
              
              // this will force browser to 
              // re download file if file was
              // updated
              slUrl += "?t=" + info.FileWriteTime.Ticks; 
              

              ASPX 或 CSHTML

              <embed ....
                 src="<%= slUrl %>"
                 ..
              />
              

              技巧是您必须通过在? 之后添加一些内容来更改 url,并创建一个新的任意随机查询字符串或使用文件写入时间,对于浏览器,something?t=1something?t=2 是两个 url,它不会被拾取如果 t 发生变化,则缓存。

              除了写入时间,您还可以选择任何标准配置值,或者您甚至可以简单地硬编码您的 ASPX 或 HTML,并在 ? 之后附加一些内容,这将迫使浏览器再次下载 silverlight xap 文件。

              <embed ....
                 src="/ClientBin/MySilverlight.xap?something-different-each-time"
                 ...
                 />
              

              【讨论】:

                猜你喜欢
                • 2011-03-26
                • 2011-01-10
                • 1970-01-01
                • 1970-01-01
                • 2014-11-11
                • 2011-02-20
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多