偵錯使用 System.Deployment.Application 的 ClickOnce 應用程式
更新:2007 年 11 月
在 Visual Studio 中,ClickOnce 部署可讓您設定應用程式的更新方式。不過,如果您必須使用並自訂進階的 ClickOnce 部署功能,就必須存取由 System.Deployment.Application 所提供的部署物件模型。您可以使用 System.Deployment.Application API 進行一些進階工作,例如:
在應用程式中建立 [立即更新] 選項
根據條件並視需要下載各種應用程式元件
將整合式項目直接更新至應用程式中
保證用戶端應用程式永遠保持在最新狀態
由於 System.Deployment.Application API 只有在使用 ClickOnce 技術部署應用程式時才有作用,因此對它們進行偵錯的唯一方式就是使用 ClickOnce 部署應用程式、附加至其中,然後進行偵錯。要在早期附加偵錯工具可能有困難,因為在您附加偵錯工具之前,此程式碼經常會在應用程式啟動並執行時開始執行。解決方案是在您的更新檢查程式碼或視需要程式碼之前,加入中斷 (或停止,針對 Visual Basic 專案)。
建議的偵錯技巧如下:
在您開始之前,請確定符號 (.pdb) 和原始程式檔 (Source File) 已封存。
部署第 1 版的應用程式。
建立新的空白方案。從 [檔案] 功能表上,按一下 [新增],再按 [專案],在 [新增專案] 對話方塊中,開啟 [其他專案類型] 節點,然後選取 [Visual Studio 方案] 資料夾。在 [範本] 窗格中,選取 [空白方案]。
將已封存的來源位置加入至這個新方案的屬性中。在 [方案總管] 中,以滑鼠右鍵按一下方案節點,然後按一下 [屬性]。在 [屬性頁] 對話方塊中,選取 [偵錯原始程式檔],然後加入已封存原始程式碼的目錄。否則,偵錯工具將會找出過時的原始程式檔 (Source File),因為原始程式檔路徑已記錄在 .pdb 檔中。如果偵錯工具使用過時的原始程式檔,您就會看見一則訊息,告訴您來源不符。
確定偵錯工具可以找到 .pdb 檔。如果您已經使用應用程式部署這些檔案,偵錯工具就會自動找到它們。它永遠會先在考慮中的組件 (Assembly) 旁搜尋。否則,您就必須將封存路徑加入至 [符號檔 (.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 版的更新時,嘗試將偵錯工具附加至第 1 版應用程式。或者,您也可以使用 System.Diagnostics.Debugger.Break 方法或僅使用 Visual Basic 中的 Stop。當然,您不應該將這些方法呼叫保留在實際執行的程式碼中。
例如,假設您正在開發 WinForms 應用程式,而且您擁有此方法的事件處理常式,其中具有更新邏輯。若要針對此進行偵錯,只要在按下按鈕之前附加,然後設定中斷點即可 (請確定您開啟適當的封存檔並在其中設定中斷點)。
只有在已部署應用程式時,才能使用 IsNetworkDeployed 屬性來叫用 System.Deployment.Application API;在 Visual Studio 中進行偵錯期間不應該叫用 API。