在 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 方法。
開始之前,請確定符號 (.pdb) 檔案和來源檔案已封存。
部署應用程式的第 1 版。
建立新的空白解決方案。 從 [檔案] 功能表中,選取 [新增],然後選取 [專案]。 在 [ 新增專案 ] 對話方塊中,開啟 [其他專案類型] 節點,然後選取 [Visual Studio 解決方案 ] 資料夾。 在 [範本 ] 窗格中,選取 [空白解決方案]。
將封存的來源位置新增至此新解決方案的屬性。 在 [方案總管] 中,以滑鼠右鍵按一下解決方案節點,然後選取 [屬性]。 在 [屬性頁面 ] 對話方塊中,選取 [偵錯來源檔],然後新增封存原始程式碼的目錄。 否則,偵錯工具會尋找過期的來源檔案,因為來源檔案路徑會記錄在 .pdb 檔案中。 如果偵錯工具使用過期的來源檔案,您會看到一則訊息,告訴您來源不相符。
請確定偵錯工具可以找到 .pdb 檔案。 如果您使用應用程式部署檔案,偵錯工具會自動尋找它們。 它總是先查看正在考慮的組件附近。 否則,您必須將封存路徑新增至符號檔案位置清單。
開啟 [工具] (或 [偵錯) >] 窗格,然後展開 [所有設定>偵錯>符號搜尋>位置] 區段。 從 符號檔 (.pdb) 位置 清單中新增、變更順序或移除項目。
開啟「工具」(或「偵錯)>」對話方塊,然後展開「偵錯符號>」區段。 從 符號檔 (.pdb) 搜尋位置 清單中加入、變更順序或移除項目。
偵錯
CheckForUpdate和Download/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部署第 2 版。
嘗試將偵錯工具附加至第 1 版應用程式,同時下載第 2 版的更新。 或者,您可以使用該
System.Diagnostics.Debugger.Break方法或直接Stop在 Visual Basic 中使用。 當然,您不應該將這些方法呼叫保留在生產程式碼中。例如,假設您正在開發 Windows Forms 應用程式,並且您有一個此方法的事件處理常式,其中包含更新邏輯。 若要偵錯此問題,只要在按下按鈕之前附加,然後設定中斷點 (請確定您開啟適當的封存檔案,並在該處設定中斷點)。
只有在部署應用程式時,才使用 IsNetworkDeployed 屬性來叫用 System.Deployment.Application API;在 Visual Studio 中偵錯期間,不應該叫用 API。