When working with Silverlight, I\'ve noticed that Firefox will cache the XAP file, so if I do an update, a user may be stuck using an outdated version. Is there a way to fo
The query string works perfectly, but I wouldn't use DateTime.Now, because it forces the user to re-download the app every time. Instead, we use the following:
protected void Page_Load(object sender, EventArgs e)
{
var versionNumber = Assembly.GetExecutingAssembly().GetName().Version.ToString();
this.myApp.Source += "?" + versionNumber;
}
This way all you have to do is increment the version number in the AssemblyInfo.cs file.
For me, the best answer is from Chris Cairns. I've just adapted it a little, calling ToString and GetHashCode, generating an ID to the timestamp:
<param name="source" value="ClientBin/App.xap?<%= System.IO.File.GetLastWriteTime(Server.MapPath("ClientBin/App.xap")).ToString().GetHashCode()%>" />
Works just fine!
You can append the source url in the object tag with the last-write date of the XAP file. Check the code at my blog.
I'm getting this to work by a combination of the suggestions above:
Set the Source property of the ASP.NET Silverlight control in the code behind, appending a time stamp to the .xap url e.g.
Silverlight1.Source = "ClientBin/MyApplication.xap?" + DateTime.Now.ToString("dd-MM-yy-HH:mm:ss");
A super simple idea: just add a fake query string to the url.
<param name="source" value="app.xap?r12345"/>
Most servers should ignore it and server the file normally--depends on your server. If you get really clever, you could make the hosting page dynamic and automatically append a tick-count or date-time string to the query string. This ensures that you get caching when you want it, but force a download when there's a change.
Ideally, your server should do this for you. But if not...
So far, the only solution that I have found, once the problem occurs, is to clear the Firefox cache.
A better solution would be much better.