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.

22
demandé sur Rachel 2011-05-06 18:16:00

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)

3
répondu Alex 2011-11-04 09:34:55

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.

2
répondu 2012-01-21 17:03:52

vous pouvez utiliser ClickOnce pour déployer votre application. Si vous voulez forcer l'utilisateur à mettre à jour, il suffit de définir la version minimale requise pour l'application (c'est dans la zone de dialogue Mises à jour de L'Application).

0
répondu Ekk 2011-11-08 04:59:17

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
}
0
répondu Leblanc Meneses 2011-11-09 15:48:48

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.

0
répondu Jairo Andres Velasco Romero 2011-12-15 13:34:57

ClickOnce a travaillé pour moi comme un charme. Assurez-vous également que vous êtes versioning votre XBAP correctement.

0
répondu grzegorz_p 2012-01-05 09:17:52

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.

0
répondu Grzegorz W 2012-08-14 08:37:18