Comment mettre à jour XBAP vers la dernière version sur l'ordinateur client?
j'ai développé une application de navigateur XAML (XBAP) qui est intégrée dans un ASP.NET page web. J'ai un problème pour obtenir la dernière version de XBAP à mettre à jour sur l'ordinateur client. Pendant le développement, j'ai dû utiliser le Mage.outil exe pour vider le cache de l'application afin que mes modifications soient visibles lorsque je tourne sur mon ordinateur local. En plus d'exécuter Mage.exe -cc
dans la ligne de commande, j'ai aussi trouvé que rundll32 dfshim CleanOnlineAppCache
fonctionnait aussi bien.
Cependant, je ne veux pas demander aux clients d'exécuter des commandes dans la ligne de commande. Que dois-je faire pour que XBAP soit automatiquement mis à jour sur l'ordinateur client? Au lieu de la mise à jour de XBAP rafraîchissant sur l'ordinateur client, la version précédente de XBAP continue à fonctionner.
mise à Jour
j'ai créé une prime sur cette question parce que j'ai le même problème. De ce que j'ai lu en ligne, XBAPs sont censés comparer les mise en cache de la version # avec la version # de celle sur le serveur web, et téléchargez la nouvelle version si elle est différente. J'ai vérifié que mes numéros de version sont différents, mais la copie mise en cache est toujours celle qui est en cours d'exécution lorsque je lance XBAP.
la copie mise en cache vient aussi si je lance le XBAP en dehors de la asp.net page, bien que j'obtienne la nouvelle version si je change les paramètres d'url.
mise à Jour #2
j'ai découvert que XBAP met automatiquement à jour sur les machines XP 32 bits, mais pas sur ma machine Windows 7 64 bits.
7 réponses
vous pourriez essayer quelque chose comme ça, bien que je l'utilise dans XAPs pas XBAPs il pourrait fonctionner pour vous aussi:
(l'extrait suit)
public partial class App : Application
{
/// <summary>
/// Creates a new <see cref="App"/> instance.
/// </summary>
public App()
{
Application.Current.CheckAndDownloadUpdateAsync();
// rest of code
MODIFIER
allait suggérer un nombre croissant de Versions entre les éditions mais il semble que cela a déjà été pris en charge. Ce comportement se produit-il sur tous les navigateurs ? Peut-être un bug/oddity spécifique de L'IE (j'ai vu beaucoup de mauvais comportements de L'IE seulement... ne m'étonne pas)
il y a des années, nous avons eu ce problème avec un site web ordinaire. Il continuait à nous hanter, et à la fin, nous avons fini par changer le préfixe d'url pour chaque nouvelle version. La toute première page n'a jamais été mise en cache et transmise à l'url mise à jour.
c'est un contournement, je sais, mais très fiable.
sans les en-têtes de cache corrects, votre navigateur peut empêcher le téléchargement de xbap.
effacer le cache pour voir si cela le corrige.
utiliser alternativement:
<%string versionInfo = typeof (AVSTX.POS.WebMvc.Controllers.HomeController).Assembly.GetName().Version.ToString(); %>
<param name="source" value="<%=ResolveUrl("~/ClientBin/AVSTX.POS.WebRia.xap?version=" + versionInfo) %>"/>
pour créer une nouvelle url que le navigateur ne peut pas mettre en cache à ce point. Il est basé sur l'inspection de la version d'assemblage hôte donc assurez - vous d'augmenter [assemblage: AssemblyVersion ("3.4.9.0")] [assemblage: AssemblyFileVersion("3.4.9.0")]
cette solution ne résoudra pas les modules dynamiques que vous pouvez télécharger à l'avenir. vous aurez besoin de fixer le réel en-têtes de cache si c'est votre problème.
edit 1: le code pour désactiver la mise en cache du navigateur
///q/disable-browser-cache-for-entire-asp-net-website-34890/".xap"))
{
context.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
context.Response.Cache.SetValidUntilExpires(false);
context.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
context.Response.Cache.SetNoStore();
}
}
#endregion
}
la mise en cache de L'Application se fait via la mise en cache des fichiers manifestes, lorsque les signatures des manifestes changent, l'exécution va mettre à niveau les fichiers locaux (en outre, il suffit de mettre à niveau les fichiers modifiés). Assurez-vous que vous avez les bons en-têtes envoyés sur les réponses HTTP. Parfois, les paramètres de cache de pages dynamiques ou les paramètres globaux des fournisseurs d'hébergement interfèrent. Pour moi, ça marche toujours dans la boîte.
ClickOnce a travaillé pour moi comme un charme. Assurez-vous également que vous êtes versioning votre XBAP correctement.
je déploie mon Xbap en copiant simplement filest dans le répertoire ClientBin de mon projet web. Je l'affiche dans un iframe. Pour faire la version d'application "rafraîchir" je dois changer "publier la Version" dans le projet Xbap avant de construire. Propriétés Du Projet - > Publier - > Publier La Version.
cette modification de la version de XBAP et du fichier manifest oblige les clients à télécharger la version la plus récente.