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

30

我有一个 Silverlight 控件打包并部署到 SharePoint web 部件中。在推送更新后,我遇到了浏览器无法加载新版本控件的问题。我已经更新了 xap 项目的程序集和文件版本,但似乎没有用。唯一让浏览器加载新 xap 的方法是进入并删除临时 Internet 文件。对我来说,在开发期间这样做还可以,但在生产环境之前需要找到解决办法。有什么想法吗?

5个回答

38
这与您的浏览器如何处理资源请求有关。Flash也存在类似的问题,有一些解决方法。
以下是详细介绍该问题及可能解决方案的文章
我建议您采取以下措施:
假设您在HTML中为xap使用了以下代码:
<param name="source" value="ClientBin/myApp.xap"/>

我建议你对它进行版本控制,这样每次推送时都会更改版本号。例如:

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

这个值是否与程序集版本(即1.0.0.0)相关联? - Chris Stewart
2
@Chris 不,这完全是虚构的。你可以放任何东西在那里,只要你想推送更改到客户端时随时更改它。然而,最好的做法可能是与您的版本控制保持一致。 - Joseph
这对我没用。我使用以下方法解决了这个问题:https://dev59.com/unE95IYBdhLWcg3whOHK#2282163 - Nelson Reis
1
我在host.aspx文件中添加了此查询字符串值的设置到我们的部署脚本中。我再也不用考虑它了,而且它运行得非常好!请注意,我们已经设置了pragma nocache,但并不适用于我们所有的客户端。 - Jersey Dude

2

遇到.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文件时)将会被下载,而无需关闭浏览器。
希望这能帮到您!

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))
    {
        ...
    }
}

1
将以下web.config文件放入ClientBin中。
<configuration>
  <system.webServer>
    <staticContent>
      <clientCache cacheControlMaxAge="0.00:00:01" cacheControlMode="UseMaxAge"/>
    </staticContent>
  </system.webServer>
</configuration>

0
这里提到的解决方案和其他帖子都没有对我有所帮助。 最终,我手动将 Release 构建中的 .xap 和 .svc 文件分别复制到 ClientBin 和 Service 部署文件夹中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接