共用方式為


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

在 Visual Studio 中,ClickOnce 部署可讓您設定應用程式的更新方式。 不過,如果您必須使用並自訂進階的 ClickOnce 部署功能,就必須存取由 System.Deployment.Application 所提供的部署物件模型。 您可以使用 System.Deployment.Application API 進行一些進階工作,例如:

  • 在應用程式中建立 [立即更新] 選項

  • 根據條件並視需要下載各種應用程式元件

  • 將整合式項目直接更新至應用程式中

  • 保證用戶端應用程式永遠保持在最新狀態

由於 System.Deployment.Application API 只有在使用 ClickOnce 技術部署應用程式時才有作用,因此對它們進行偵錯的唯一方式就是使用 ClickOnce 部署應用程式、附加至其中,然後進行偵錯。 要在早期附加偵錯工具可能有困難,因為在您附加偵錯工具之前,此程式碼經常會在應用程式啟動並執行時開始執行。 解決方案是在您的更新檢查程式碼或視需要程式碼之前,加入中斷 (或停止,針對 Visual Basic 專案)。

建議的偵錯技巧如下:

  1. 在您開始之前,請確定符號 (.pdb) 和原始程式檔 (Source File) 已封存。

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

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

  4. 將已封存的來源位置加入至這個新方案的屬性中。 在 [方案總管] 中,以滑鼠右鍵按一下方案節點,然後按一下 [屬性]。 在 [屬性頁] 對話方塊中,選取 [偵錯原始程式檔],然後加入已封存原始程式碼的目錄。 否則,偵錯工具將會找出過時的原始程式檔 (Source File),因為原始程式檔路徑已記錄在 .pdb 檔中。 如果偵錯工具使用過時的原始程式檔,您就會看見一則訊息,告訴您來源不符。

  5. 確定偵錯工具可以找到 .pdb 檔。 如果您已經使用應用程式部署這些檔案,偵錯工具就會自動找到它們。 它永遠會先在考慮中的組件 (Assembly) 旁搜尋。 否則,您就必須將封存路徑加入至 [符號檔 (.pdb) 位置] (若要存取這個選項,請在 [工具] 功能表中,按一下 [選項]、開啟 [偵錯] 節點,然後按一下 [符號])。

  6. 偵錯 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
    
  7. 部署版本 2。

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

    例如,假設您正在開發 Windows Form 應用程式,而且您擁有此方法的事件處理常式,其中具有更新邏輯。 若要針對此進行偵錯,只要在按下按鈕之前附加,然後設定中斷點即可 (請確定您開啟適當的封存檔並在其中設定中斷點)。

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

請參閱

參考

System.Deployment.Application