7

我试图弄清楚如果新版本可用但旧版本仍缓存在浏览器中,如何强制浏览器重新下载 .xap 文件。

我看过另一个线程: 如何强制 Firefox 不缓存或重新下载 Silverlight XAP 文件?

最好的解决方案似乎是:

protected void Page_Load(object sender, EventArgs e)
{
    var versionNumber = Assembly.GetExecutingAssembly().GetName().Version.ToString();
    this.myApp.Source += "?" + versionNumber;
}

但是,我没有得到 this.myApp 部分。那是一个什么样的物体?很抱歉重新打开它,但我希望人们能发布完整的解决方案。

谢谢

4

3 回答 3

8

您看到的是基于asp:SilverlightWeb 服务器控件的代码,但该控件从 Silverlight 3 开始就停止了。

现在我们要么直接使用对象标签,要么敲出我们自己的服务器控件来呈现我们对对象标签的偏好。

作为一个对象标签,它看起来像这样:-

<form id="form1" runat="server" style="height:100%">
<div id="silverlightControlHost">
    <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
      <param id="xapSource" runat="server" name="source" value="ClientBin/SilverlightApplication1.xap"/>
      <param name="onError" value="onSilverlightError" />
      <param name="background" value="white" />
      <param name="minRuntimeVersion" value="4.0.50303.0" />
      <param name="autoUpgrade" value="true" />
      <param name="initParams" id="initParams" runat="server" />
      <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50303.0" style="text-decoration:none">
          <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/>
      </a>
    </object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div>
</form>

请注意源参数上的 id 和 runat="server"。有了它,页面加载可能看起来像这样:-

protected void Page_Load(object sender, EventArgs e)
{
    string xapPhysicalPath = Server.MapPath(xapSource.Attributes["value"]);
    DateTime lastWrite = System.IO.File.GetLastWriteTime(xapPhysicalPath);
    xapSource.Attributes["value"] = xapSource.Attributes["value"] + "?" + lastWrite.ToString("yyyyMMddThh:mm:ss");

}

这将确保用于源的 url 在 xap 更改时始终会更改。您遇到的原始代码存在缺陷,即 xap 仍然可以在不更改完全未连接的程序集版本号的情况下进行更改。

于 2011-05-13T12:15:32.343 回答
1

您只需将当前日期时间附加到 xap,它每次都会被视为新的,因此客户端上没有缓存。

value="ClientBin/SilverlightApplication1.xap?<%=DateTime.Now%>"

希望这可以帮助。

于 2012-04-12T14:54:42.470 回答
0

myApp 可能是在页面中呈现 Silverlight 对象的 Web 控件。

通过设置其 Source 属性,指向 XAP 的 url 获得了一个与以前版本不同的参数,导致浏览器使缓存的 xap 无效(为此参数设置了另一个值)。

于 2011-05-13T12:03:55.373 回答