J'essaie de comprendre comment forcer le navigateur à redéfinir un fichier .xap si la nouvelle version est disponible et l'ancienne est toujours mise en cache dans le navigateur.
J'ai vu l'autre fil: Comment forcez-vous Firefox pour ne pas mettre en cache ni télécharger un fichier Silverlight XAP? p>
La meilleure solution semble être: P>
protected void Page_Load(object sender, EventArgs e) { var versionNumber = Assembly.GetExecutingAssembly().GetName().Version.ToString(); this.myApp.Source += "?" + versionNumber; }
3 Réponses :
Le myApp est probablement un contrôle Web qui rend l'objet Silverlight dans la page. P>
En définissant sa propriété source L'URL qui pointe vers le XAP reçoit un paramètre différent de la version précédente, ce qui provoque invalider le navigateur d'invalider le fichier XAP (qui avait une autre valeur définie pour ce paramètre). P>
Techniquement, aucune invalidation de cache n'aurait lieu, le navigateur n'a jamais vu cette URL avant et ne le trouverait donc pas dans le cache de toute façon.
Qu'est-ce que votre recherche est Code basé sur le Maintenant, nous utilisons maintenant la balise d'objet ou cassons notre Propre des commandes de serveur pour rendre notre préférence de la balise d'objet. p> comme une étiquette d'objet, il ressemblerait à ceci comme suit: - p> ASP: Silverlight Code> Contrôle du serveur Web, mais ce contrôle a été interrompu de Silverlight 3.
protected void Page_Load(object sender, EventArgs e)
{
string xapPhysicalPath = Server.MapPath(xapSource.Attributes["value"]);
DateTime lastWrite = System.IO.File.GetLastWriteTime(xapPhysicalPath);
xapSource.Attributes["value"] = xapSource.Attributes["value"] + "?" + lastWrite.ToString("yyyyMMddThh:mm:ss");
}
Je ne peux pas atteindre le "param" ("xapsource" dans votre exemple) objet dans CodeBeHind, IntelliSense ne le voit pas du tout. Est-ce que je fais quelque chose de mal? Qu'est-ce que c'est censé ressembler au fichier de designer.cs? Quel est son type exact?
Bon, je l'ai eu pour travailler. Param ne peut pas être atteint de manière programmative, il est nécessaire d'utiliser cette solution: geekswithblogs.net/mbcrump/archive/2011/01/06/...
Oui, vous faites quelque chose de mal. Il devrait ressembler à protégé global :: system.web.ui.htmcontrols.htmlgenericcontrol xapsource; code>. Le type exact est
system.web.ui.htmcontrols.htmlgenericcontrol code>.
@Vexxttreme: "Param ne peut pas être atteint par programme". N'est pas vrai, je le fais pour modifier le contenu des initparams. Souvent qualifiés Silverlighters sont peu faibles sur les compétences plus anciennes ASP.NET. Vous avez le runat = "serveur" sur le paramètre droit? Il a l'id "xapsource". Ensuite, vous avez vous-même un htmlgenericcontrol code>, vous pouvez manipuler ses attributs via la collection
code>.
Oui vous avez raison. La raison pour laquelle je ne pouvais pas y arriver est parce que ce n'était pas dans le fichier designer.cs, et je ne connaissais pas le type exact et que je ne pouvais pas l'ajouter manuellement pour que je puisse supposer que cela ne pouvait pas être atteint du tout.
@Vexxtreme: Je viens de réaliser où potentiellement la confusion provenait. L'attribut à modifier est une "valeur" non "source". J'ai modifié la réponse en conséquence, ma mauvaise.
Vous pouvez simplement ajouter la dateTime actuelle au XAP et il sera considéré comme neuf à chaque fois, donc pas de mise en cache sur le client.
value="ClientBin/SilverlightApplication1.xap?<%=DateTime.Now%>"