调试使用 System.Deployment.Application 的 ClickOnce 应用程序

在 Visual Studio 中,ClickOnce 部署让您可以配置如何更新应用程序。 但是,如果需要使用并自定义高级 ClickOnce 部署功能,您就需要访问 System.Deployment.Application 提供的部署对象模型。 您可以使用高级任务的 System.Deployment.Application API,如:

  • 在您的应用程序中创建“立即更新”选项

  • 各种应用程序组件的有条件、按需要下载

  • 将更新直接集成到应用程序中

  • 保证客户端应用程序总是最新的

只有使用 ClickOnce 技术部署应用程序时,System.Deployment.Application API 才会运行,因此调试这些 API 的唯一方法是使用 ClickOnce 部署应用程序,附加到该应用程序,再对其进行调试。 由于此代码通常在应用程序启动时运行,并在可以附加调试器之前执行,因此要做到尽早附加调试器会比较困难。 一个解决方案是在您的更新检查代码或需求代码之前设置断点(对于 Visual Basic 项目,为停止)。

推荐如下调试技术:

  1. 开始之前,请确保符号 (.pdb) 和源文件均已存档。

  2. 部署应用程序的版本 1。

  3. 创建一个新的空白解决方案。 在**“文件”菜单上,单击“新建”,再单击“项目”。 在“新建项目”对话框中,打开“其他项目类型”节点,再选择“Visual Studio 解决方案”文件夹。 在“模板”窗格中,选择“空白解决方案”**。

  4. 将存档的源位置添加到这个新解决方案的属性中。 在**“解决方案资源管理器”中,右击解决方案节点,再单击“属性”。 在“属性页”对话框中,选择“调试源文件”**,再添加存档源代码的目录。 否则,由于源文件的路径记录在 .pdb 文件中,调试器将找到过期的源文件。 如果调试器使用过期的源文件,您会看到消息,告诉您这个源不匹配。

  5. 请确保调试器能找到 .pdb 文件。 如果通过应用程序部署了这些文件,调试器会自动找到它们。 它始终首先出现在有关程序集旁边。 否则,您就需要将存档路径添加到**“符号文件 (.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 窗体应用程序,并拥有内部带有更新逻辑的此方法的事件处理程序。 若要调试它,只需在按下按钮前附加,然后设置断点(确保打开相应的存档文件并在其中设置断点)。

仅当部署应用程序后才使用 IsNetworkDeployed 属性调用 System.Deployment.Application API;在 Visual Studio 中调试时不应调用这些 API。

请参见

参考

System.Deployment.Application