Debuggen von ClickOnce-Anwendungen, die System.Deployment.Application verwenden

In Visual Studio können Sie mit der ClickOnce-Bereitstellung konfigurieren, wie eine Anwendung aktualisiert wird. Wenn Sie jedoch erweiterte ClickOnce-Bereitstellungsfeatures verwenden und anpassen möchten, müssen Sie auf das von System.Deployment.Applicationbereitgestellte Bereitstellungsobjektmodell zugreifen. Sie können die System.Deployment.Application-APIs für erweiterte Aufgaben verwenden, z. B.:

  • Erstellen einer Option „Jetzt aktualisieren“ in Ihrer Anwendung

  • Bedingte, bedarfsgesteuerte Downloads verschiedener Anwendungskomponenten

  • Direkt in die Anwendung integrierte Updates

  • Gewährleistung, dass die Clientanwendung immer auf dem neuesten Stand ist

    Da die System.Deployment.Application-APIs nur funktionieren, wenn eine Anwendung mit der ClickOnce-Technologie bereitgestellt wird, besteht die einzige Möglichkeit zum Debuggen darin, die Anwendung mithilfe von ClickOnce bereitzustellen, ClickOnce an sie anzufügen und dann zu debuggen. Oft ist es schwierig, den Debugger früh genug anzufügen, da dieser Code meist schon beim Starten der Anwendung ausgeführt wird, bevor Sie den Debugger anfügen können. Eine Lösung besteht darin, Unterbrechungen (oder Haltepunkte bei Visual Basic-Projekten) vor dem Updateprüfcode bzw. bedarfsgesteuerten Code zu platzieren.

    Die empfohlene Debugmethode lautet wie folgt:

Hinweis

Die Klasse ApplicationDeployment und die APIs im Namespace System.Deployment.Application werden in .NET Core und .NET 5 und höheren Versionen nicht unterstützt. In .NET 7 wird eine neue Methode für den Zugriff auf Anwendungsbereitstellungseigenschaften unterstützt. Weitere Informationen finden Sie unter Zugreifen auf ClickOnce-Bereitstellungseigenschaften in .NET. .NET 7 unterstützt nicht das Äquivalent von ApplicationDeployment-Methoden.

  1. Bevor Sie beginnen, stellen Sie sicher, dass die Symboldateien (.pdb) und Quelldateien archiviert sind.

  2. Stellen Sie Version 1 der Anwendung bereit.

  3. Erstellen Sie eine neue leere Projektmappe. Klicken Sie im Menü Datei auf Neu und dann auf Projekt. Erweitern Sie im Dialogfeld Neues Projekt den Knoten Andere Projekttypen, und wählen Sie Visual Studio-Projektmappen aus. Wählen Sie im Bereich Vorlagen die Option Leere Projektmappeaus.

  4. Fügen Sie den Eigenschaften für diese neue Projektmappe den archivierten Quellspeicherort hinzu. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektmappenknoten, und wählen Sie dann Eigenschaften aus. Wählen Sie im Dialogfeld Eigenschaftenseiten die Option Quelldateien debuggen aus, und fügen Sie dann das Verzeichnis des archivierten Quellcodes hinzu. Andernfalls findet der Debugger die veralteten Quelldateien, da die Quelldateipfade in der PDB-Datei aufgezeichnet werden. Wenn der Debugger veraltete Quelldateien verwendet, wird eine Meldung angezeigt, dass die Quelle nicht übereinstimmt.

  5. Stellen Sie sicher, dass der Debugger die PDB-Dateien finden kann. Wenn Sie sie mit Ihrer Anwendung bereitgestellt haben, findet der Debugger sie automatisch. Er sucht immer zuerst neben der betreffenden Assembly. Andernfalls müssen Sie den Archivpfad zu den Speicherorten der Symboldatei (PDB) hinzufügen (um auf diese Option zuzugreifen, klicken Sie im Menü Extras auf Optionen, öffnen Sie dann den Knoten Debuggen, und klicken Sie auf Symbole).

  6. Debuggen Sie, was zwischen den Methodenaufrufen CheckForUpdate und Download/Update geschieht.

    Der Updatecode kann beispielsweise wie folgt aussehen:

        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. Stellen Sie Version 2 bereit.

  8. Versuchen Sie, den Debugger an die Anwendung der Version 1 anzufügen, während ein Update für Version 2 heruntergeladen wird. Alternativ können Sie die System.Diagnostics.Debugger.Break-Methode oder einfach Stop in Visual Basic verwenden. Natürlich sollten Sie diese Methodenaufrufe nicht im Produktionscode belassen.

    Angenommen, Sie entwickeln eine Windows Forms-Anwendung und verfügen über einen Ereignishandler für diese Methode mit enthaltener Updatelogik. Zum Debuggen fügen Sie diese einfach vor dem Drücken der Schaltfläche an, und legen Sie dann einen Haltepunkt fest (stellen Sie sicher, dass Sie die entsprechende archivierte Datei öffnen und den Haltepunkt dort festlegen).

    Verwenden Sie die Eigenschaft IsNetworkDeployed, um die System.Deployment.Application-APIs nur aufzurufen, wenn die Anwendung bereitgestellt wird. Die APIs sollten während des Debuggens in Visual Studio nicht aufgerufen werden.