从Visual Studio部署Silverlight网页不会更新缓存

时间:2013-10-09 15:14:18

标签: c# web-services silverlight visual-studio-2012 web-deployment

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

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

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

我尝试使用互联网选项清空网络浏览器缓存 - > Genereal - >浏览历史记录 - >删除,但这似乎没有帮助。

我注意到,第一次导航到silverlight网页时,它加载的时间会更长,你可以看到silverlight加载符号。当我导航到已发布的页面时,这是我无法获得的。

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

有关于此的任何想法?

1 个答案:

答案 0 :(得分:1)

此问题已在许多其他SO帖子和许多其他网站上进行了讨论,但我最喜欢的解决方案在此博客(和其他人)中进行了讨论avoid-incorrect-caching-of-silverlight-xap-file

它有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%">
<%––<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" />
相关问题