1

这已经困扰了我一段时间,我似乎无法弄清楚如何解决它。

我有一个在 Visual Studio 2012 Update 3 中开发的 silverlight 业务应用程序。我有一个部署项,它使用文件共享将解决方案文件部署到 IIS 所在的文件服务器。

但是,部署后,当我尝试在 Internet Explorer(以及 Firefox)中打开页面时,我得到了旧页面。我认为这可能与缓存在本地计算机某处的 silverlight 应用程序有关。有谁知道这个缓存在哪里,是否可以清空它?

我曾尝试使用 Internet 选项 -> 通用 -> 浏览历史记录 -> 删除清空 Web 浏览器缓存,但这似乎没有帮助。

我注意到,当您第一次导航到 silverlight 网页时,它会加载更长的时间,并且您可以看到 silverlight 加载符号。这是我导航到已发布页面时没有得到的东西。

有人会认为 Silverlight 应用程序会检测是否有新版本可用并丢弃旧版本。

有什么想法吗?

4

1 回答 1

1

此问题已在许多其他 SO 帖子和许多其他网站上讨论过,但我最喜欢的解决方案在此博客(和其他)中 讨论

它具有 C# 和 VB 版本的代码。基本上,您更改托管 XAP 的网页以将日期添加到传递给浏览器的名称。这样,每次 XAP 更改时,浏览器都知道它是不同的 XAP 并下载它。

对于后代,这是该链接所说的:

下面的代码将 Silverlight 应用程序 XAP 文件的最后写入文件日期附加到 Silverlight 对象标记的源参数中的路径。这将确保 Web 浏览器和代理服务器的构造不佳的缓存功能不会错误地使用旧的、错误的 XAP 文件构建。但是,它仍然允许这些缓存工作。此外,还会执行检查以避免在调试期间更改 XAP 文件路径,这是为了允许 Silverlight Spy 等调试工具继续运行。

C#

<object id="Xaml1" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
<%––&lt;param name="source" value="ClientBin/SilverlightApp.xap"/>––%>
<%
  string orgSourceValue = @"ClientBin/SilverlightApp.xap";
  string param;
  if (System.Diagnostics.Debugger.IsAttached)
    param = "<param name=\"source\" value=\"" + orgSourceValue + "\" />";
  else
  {
    string xappath = HttpContext.Current.Server.MapPath(@"") + @"\" + orgSourceValue;
    DateTime xapCreationDate = System.IO.File.GetLastWriteTime(xappath);
    param = "<param name=\"source\" value=\"" + orgSourceValue + "?ignore=" + xapCreationDate.ToString() + "\" />";
  }
  Response.Write(param);
%>
<param name="onError" value="onSilverlightError" /> 

VB

<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
  <%--<param name="source" value="SpecialEntityMaint.xap"/>--%>
    <%
      Dim orgSourceValue As String = "SpecialEntityMaint.xap"
      Dim param As String
      If (System.Diagnostics.Debugger.IsAttached) Then
        param = "<param name=""source"" value=""" + orgSourceValue + """ />"
      Else
        Dim xappath As String = HttpContext.Current.Server.MapPath("") + "\" + orgSourceValue
        Dim xapCreationDate As DateTime = System.IO.File.GetLastWriteTime(xappath)
        param = "<param name=""source"" value=""" + orgSourceValue + "?ignore=" + xapCreationDate.ToString() + """ />"
      End If

      Response.Write(param)
    %>
    <param name="onError" value="onSilverlightError" />
于 2013-10-10T15:47:46.710 回答