共用方式為


偵錯使用 System.Deployment.Application 的 ClickOnce 應用程式

在 Visual Studio 中,ClickOnce 部署可讓您設定應用程式的更新方式。 不過,如果您想要使用和自訂進階 ClickOnce 部署功能,則需要存取 所提供的 System.Deployment.Application部署物件模型。 您可以使用 System.Deployment.Application API 執行高級任務,例如:

  • 在您的應用程式中建立「立即更新」選項

  • 各種應用程式元件的條件式隨選下載

  • 直接整合到應用程式中的更新

  • 保證客戶端應用程式一律保持最新

    由於 API 只有 System.Deployment.Application 在使用 ClickOnce 技術部署應用程式時才有效,因此偵錯它們的唯一方法是使用 ClickOnce 部署應用程式、附加到應用程式,然後進行偵錯。 儘早附加偵錯工具可能很困難,因為此程式碼通常會在應用程式啟動並執行時執行,然後才能附加偵錯工具。 解決方案是在您的更新檢查程式碼或隨選程式碼之前放置中斷點(或停止點,對於 Visual Basic 專案)。

    建議的偵錯技術如下:

備註

ApplicationDeployment命名空間中的System.Deployment.Application類別和 API 不支援 .NET Core 和 .NET 5 和更新版本。 在 .NET 7 中,支援存取應用程式部署屬性的新方法。 如需詳細資訊,請參閱 存取 .NET 中的 ClickOnce 部署屬性。 .NET 7 不支援對等的 ApplicationDeployment 方法。

  1. 開始之前,請確定符號 (.pdb) 檔案和來源檔案已封存。

  2. 部署應用程式的第 1 版。

  3. 建立新的空白解決方案。 從 [檔案] 功能表中,選取 [新增],然後選取 [專案]。 在 [ 新增專案 ] 對話方塊中,開啟 [其他專案類型] 節點,然後選取 [Visual Studio 解決方案 ] 資料夾。 在 [範本 ] 窗格中,選取 [空白解決方案]。

  4. 將封存的來源位置新增至此新解決方案的屬性。 在 [方案總管] 中,以滑鼠右鍵按一下解決方案節點,然後選取 [屬性]。[屬性頁面 ] 對話方塊中,選取 [偵錯來源檔],然後新增封存原始程式碼的目錄。 否則,偵錯工具會尋找過期的來源檔案,因為來源檔案路徑會記錄在 .pdb 檔案中。 如果偵錯工具使用過期的來源檔案,您會看到一則訊息,告訴您來源不相符。

  5. 請確定偵錯工具可以找到 .pdb 檔案。 如果您使用應用程式部署檔案,偵錯工具會自動尋找它們。 它總是先查看正在考慮的組件附近。 否則,您必須將封存路徑新增至符號檔案位置清單。

    開啟 [工具] (或 [偵錯) >] 窗格,然後展開 [所有設定>偵錯>符號搜尋>位置] 區段。 從 符號檔 (.pdb) 位置 清單中新增、變更順序或移除項目。

    開啟「工具」(或「偵錯)>」對話方塊,然後展開「偵錯符號>」區段。符號檔 (.pdb) 搜尋位置 清單中加入、變更順序或移除項目。

  6. 偵錯 CheckForUpdateDownload/Update 方法呼叫之間發生的情況。

    例如,更新程式碼可能如下所示:

        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. 部署第 2 版。

  8. 嘗試將偵錯工具附加至第 1 版應用程式,同時下載第 2 版的更新。 或者,您可以使用該 System.Diagnostics.Debugger.Break 方法或直接 Stop 在 Visual Basic 中使用。 當然,您不應該將這些方法呼叫保留在生產程式碼中。

    例如,假設您正在開發 Windows Forms 應用程式,並且您有一個此方法的事件處理常式,其中包含更新邏輯。 若要偵錯此問題,只要在按下按鈕之前附加,然後設定中斷點 (請確定您開啟適當的封存檔案,並在該處設定中斷點)。

    只有在部署應用程式時,才使用 IsNetworkDeployed 屬性來叫用 System.Deployment.Application API;在 Visual Studio 中偵錯期間,不應該叫用 API。