更新后强制浏览器重新加载 Silverlight xap

Posted

技术标签:

【中文标题】更新后强制浏览器重新加载 Silverlight xap【英文标题】:Forcing browsers to reload Silverlight xap after an update 【发布时间】:2010-12-15 21:49:04 【问题描述】:

我有一个 Silverlight 控件打包并部署到 SharePoint Web 部件。推送更新后,浏览器无法加载新版本的控件。我正在更新我的 xap 项目的程序集和文件版本,但这似乎并不重要。让浏览器加载新的 xap 的唯一方法是进入并删除临时 Internet 文件。对我来说,在开发过程中,这没关系,但我需要在生产之前找到解决方案。有什么想法吗?

【问题讨论】:

【参考方案1】:

这与您的浏览器如何处理资源请求有关。 Flash 也有类似的问题,有几种解决方法。

这是一个article,详细说明了问题和可能的解决方案。

我建议这样做:

假设你在你的 html 中为你的 xap 提供了这个:

<param name="source" value="ClientBin/myApp.xap"/>

我会对其进行版本化,因此每当您进行推送时,您都会更改版本号。示例:

<param name="source" value="ClientBin/myApp.xap?ver=1"/>

【讨论】:

该值是否关联回程序集版本(即 1.0.0.0)? @Chris 不,这完全是虚构的。您可以将任何内容放在那里,只要您想在将更改推送到客户端时进行更改即可。不过,最佳实践可能是使其与您的版本控制保持一致。 这对我不起作用。我用这个解决了它:***.com/questions/2281919/… 我在我们的部署脚本中添加了 host.aspx 文件中这个查询字符串值的设置。我再也不用想它了,它就像一个魅力!请注意,我们已经设置了 pragma nocache,但它并不适用于我们的所有客户。【参考方案2】:

太棒了!甚至在 Windows Phone 开发中工作。

我已经把这条线:

NavigationService.Navigate(new Uri("/Game.xaml?versao="+version, UriKind.RelativeOrAbsolute));

然后重写方法OnNavigatedTo:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)

    base.OnNavigatedTo(e);
    string var;
    if (NavigationContext.QueryString.TryGetValue("version", out var))
    
        ...
    

【讨论】:

【参考方案3】:

遇到 .XAP 缓存并不少见,这意味着每次部署新版本的 Silverlight 应用程序时,浏览器都不会下载更新的 .XAP 文件。

一种解决方案可能是更改 IIS 属性。您可以按照以下步骤为您的 .XAP 文件打开“启用内容过期 HTTP 标头”选项:

Open IIS Manager
Go to “Default Web Site” and find web site for your Silverlight project.
Find the .XAP file under ClientBin.
Go to the properties page of the .XAP file, on HTTP Headers Tab, Turn on “Enable Content Expiration”, click the “Expire Immediately” radio button.
Save the changes.

这样,当您刷新页面时,无需关闭浏览器即可下载最新的 .XAP(仅当存在最新的 .XAP 文件时)。

希望这会有所帮助!

【讨论】:

【参考方案4】:

将以下web.config放入ClientBin

<configuration>
  <system.webServer>
    <staticContent>
      <clientCache cacheControlMaxAge="0.00:00:01" cacheControlMode="UseMaxAge"/>
    </staticContent>
  </system.webServer>
</configuration>

【讨论】:

【参考方案5】:

此处和其他帖子中提到的解决方案始终没有帮助我。 我最终所做的是将 .xap 和 .svc 文件从我的 Release 版本手动复制到 ClientBin 和 Service 部署文件夹。

【讨论】:

以上是关于更新后强制浏览器重新加载 Silverlight xap的主要内容,如果未能解决你的问题,请参考以下文章

如何重新加载在浏览器中运行 Silverlight 应用程序的默认 AppDomain?

按下后退按钮时强制重新加载/刷新

如何在加载后强制 iFrame 重新加载

如何强制浏览器重新加载缓存的 CSS 和 JavaScript 文件

仅当它们已更改时才强制浏览器重新加载 css/js

强制绑定更新 Silverlight