我的Silverlight(4.0)应用程序(由ASP.NET网站托管)使用4个项目,它们都使用一个文件和程序集版本:
[assembly: AssemblyVersion("1.0.*")]
当前显示的应用程序版本为1.0.3842.38865,但较新的应用程序(1.0.3854.42448)最近上传到服务器.
问题是浏览器在部署到服务器后不会加载新的Silverlight应用程序.
这是一个HTML代码,用于“渲染”silverlight-html-loader(不确定它是否是正确的名称):
<div id="silverlightControlHost" style="height:950px"> <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%"> <param name="source" value="/ClientBin/VfmElitaSilverlightClientApplication.xap"/> <param name="onError" value="onSilverlightError" /> <param name="background" value="white" /> <param name="initParams" value="adr=squad,team=811,match=3217203" /> <param name="minRuntimeVersion" value="3.0.40624.0" /> <param name="autoUpgrade" value="true" /> <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40624.0" style="text-decoration:none"> <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none"/> </a> </object> <iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe>
我试图在包含上次XAP文件修改时间的对象的“source”参数中添加一个参数:
<param name="source" value="/ClientBin/VfmElitaSilverlightClientApplication.xap?Ver=2010072243523AM"/>
这导致Silverlight应用程序加载错误:
Unhandled Error in Silverlight
Application Code: 2103 Category:
InitializeError Message:
Invalid or malformed application:
Check manifest
你能否告诉我如何强制浏览器从服务器获取新的应用程序(没有浏览器缓存操作,我想保留浏览器缓存选项)?
非常感谢你!
附:有必要添加silverlight应用程序在我的localhost上工作(上传和启动)没有任何参数跳舞.只有当我将其上传到网站时 – 它才会被浏览器重新加载.并在xap文件路径中添加其他参数 – 对localhost无效.
解决方法
我们目前使用的是以下内容,它获取.xap文件的最后写入时间并将其附加到source-param:
<object ... > <% var source = "ClientBin/App.xap"; string param; if (System.Diagnostics.Debugger.IsAttached) param = string.Format("<param name=\"source\" value=\"{0}\" />",source); else { var path = HttpContext.Current.Server.MapPath(string.Empty) + "\\" + source; var xapCreatedAt = System.IO.File.GetLastWriteTime(path); param = string.Format("<param name=\"source\" value=\"{0}?version={1}\" />",source,xapCreatedAt.ToString("yyyyMMddTHHmmssfff")); } Response.Write(param); %> <param ...