Déboguer des applications ClickOnce qui utilisent System.Deployment.Application

Dans Visual Studio, le déploiement ClickOnce vous permet de configurer la façon dont une application est mise à jour. Cependant, si vous avez besoin d’utiliser et de personnaliser des fonctionnalités avancées de déploiement ClickOnce, vous devez accéder au modèle objet de déploiement fourni par System.Deployment.Application. Vous pouvez utiliser les API System.Deployment.Application pour effectuer des tâches avancées, notamment pour :

  • Créer une option « Mettre à jour maintenant » dans votre application

  • Effectuer des téléchargements conditionnels à la demande de divers composants d’application

  • Effectuer des mises à jour directement intégrées dans l’application

  • Veiller à ce que l’application cliente soit toujours à jour

    Sachant que les API System.Deployment.Application fonctionnent uniquement quand une application est déployée avec la technologie ClickOnce, la seule façon de déboguer une application est de la déployer à l’aide de ClickOnce, de l’y attacher, puis de la déboguer. Il peut être difficile d’attacher le débogueur à un stade suffisamment précoce, car ce code s’exécute souvent au démarrage de l’application et s’exécute avant que le débogueur ait pu être attaché. Une solution consiste à placer des interruptions (ou arrêts pour les projets Visual Basic) avant votre code de vérification des mises à jour ou code à la demande.

    La technique de débogage recommandée est la suivante :

Notes

La classe ApplicationDeployment et les API de l’espace de noms System.Deployment.Application ne sont pas prises en charge dans .NET Core, .NET 5 et les versions ultérieures. Dans .NET 7, une nouvelle méthode d’accès aux propriétés de déploiement d’application est prise en charge. Pour plus d’informations, consultez Accéder aux propriétés de déploiement ClickOnce dans .NET. .NET 7 ne prend pas en charge l’équivalent des méthodes ApplicationDeployment.

  1. Avant de commencer, vérifiez que les fichiers de symboles (.pdb) et les fichiers sources sont archivés.

  2. Déployez la version 1 de l’application.

  3. Créez une solution vide. Dans le menu Fichier, cliquez sur Nouveau, puis sur Projet. Dans la boîte de dialogue Nouveau projet, ouvrez le nœud Autres types de projets, puis sélectionnez le dossier Solutions Visual Studio. Dans le volet Modèles, sélectionnez Nouvelle solution.

  4. Ajoutez l’emplacement source archivé aux propriétés de cette nouvelle solution. Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le nom de la solution, puis cliquez sur Propriétés. Dans la boîte de dialogue Pages de propriétés, sélectionnez Fichiers sources de débogage, puis ajoutez le répertoire du code source archivé. Sinon, le débogueur recherche les fichiers sources obsolètes, car les chemins des fichiers sources sont enregistrés dans le fichier .pdb. Si le débogueur utilise des fichiers sources obsolètes, un message vous indique que la source ne correspond pas.

  5. Vérifiez que le débogueur parvient à trouver les fichiers .pdb. Si vous les avez déployés avec votre application, le débogueur les trouve automatiquement. Il commence toujours par rechercher à proximité de l’assembly en question. Sinon, vous devez ajouter le chemin d’archivage pour les Emplacements du fichier de symboles (.pdb) (pour accéder à cette option, dans le menu Outils, cliquez sur Options, ouvrez le nœud Débogage, puis cliquez sur Symboles).

  6. Déboguez ce qui se passe entre les appels de méthode CheckForUpdate et Download/Update.

    Par exemple, le code de mise à jour peut se présenter comme suit :

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            If My.Application.Deployment.IsNetworkDeployed Then
    
                If (My.Application.Deployment.CheckForUpdate()) Then
    
                    My.Application.Deployment.Update()
                    Application.Restart()
    
                End If
    
            End If
        End Sub
    
  7. Déployez la version 2.

  8. Essayez d’attacher le débogueur à la version 1 de l’application pendant qu’elle télécharge une mise à jour pour la version 2. Vous pouvez aussi utiliser la méthode System.Diagnostics.Debugger.Break ou simplement Stop en Visual Basic. Il va de soi que vous ne devez pas laisser ces appels de méthode dans la code de production.

    Par exemple, supposez que vous développez une application Windows Forms et que vous disposez d’un gestionnaire d’événements pour cette méthode qui intègre la logique de mise à jour. Pour le débogage, il suffit d’attacher avant d’appuyer sur le bouton, puis de définir un point d’arrêt (veillez à ouvrir le fichier archivé approprié et à y définir le point d’arrêt).

    N’utilisez la propriété IsNetworkDeployed pour appeler les API System.Deployment.Application qu’après avoir déployé l’application ; les API ne doivent pas être appelées pendant le débogage dans Visual Studio.