此问题已在许多其他 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%">
<%––<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" />