1

这一直困扰着我一段时间,我似乎无法弄清楚如何解决它。从Visual Studio部署silverligth网页不会更新缓存

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

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

我已经尝试使用Internet选项清空网页浏览器缓存 - > Genereal - >浏览历史 - >删除,但这似乎没有帮助。

我注意到,第一次导航到Silverlight网页时,它加载的时间稍长一些,您可以看到Silverlight加载符号。这是我导航到发布页面时不能获得的内容。

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

对此有何想法?

回答

1

这个问题在许多其他SO职位和许多其他网站进行了讨论,但解决方案,我最喜欢的是在这个博客中讨论(及其他)avoid-incorrect-caching-of-silverlight-xap-file

它同时具有C#和VB的版本码。基本上,您更改承载XAP的网页以将日期添加到传递给浏览器的名称。这样,每当XAP发生变化时,浏览器就知道它是一个不同的XAP并下载它。

对于后人,这里是链接这样说:

下面的代码追加Silverlight应用程序XAP文件的最后写FILEDATE在Silverlight的对象标记的源parametre的路径。 这将确保网页浏览器和代理服务器的构造不佳的缓存功能不会错误地使用旧的,错误的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" />