调试使用 System.Deployment.Application 的 ClickOnce 应用程序
在 Visual Studio 中,ClickOnce 部署让您可以配置如何更新应用程序。 但是,如果需要使用并自定义高级 ClickOnce 部署功能,您就需要访问 System.Deployment.Application 提供的部署对象模型。 您可以使用高级任务的 System.Deployment.Application API,如:
各种应用程序组件的有条件、按需要下载
将更新直接集成到应用程序中
保证客户端应用程序总是最新的
只有使用 ClickOnce 技术部署应用程序时,System.Deployment.Application API 才会运行,因此调试这些 API 的唯一方法是使用 ClickOnce 部署应用程序,附加到该应用程序,再对其进行调试。 由于此代码通常在应用程序启动时运行,并在可以附加调试器之前执行,因此要做到尽早附加调试器会比较困难。 一个解决方案是在您的更新检查代码或需求代码之前设置断点(对于 Visual Basic 项目,为停止)。
推荐如下调试技术:
开始之前,请确保符号 (.pdb) 和源文件均已存档。
部署应用程序的版本 1。
创建一个新的空白解决方案。 在**“文件”菜单上,单击“新建”,再单击“项目”。 在“新建项目”对话框中,打开“其他项目类型”节点,再选择“Visual Studio 解决方案”文件夹。 在“模板”窗格中选择“空白解决方案”**。
将存档的源位置添加到这个新解决方案的属性中。 在**“解决方案资源管理器”中,右击解决方案节点,再单击“属性”。 在“属性页”对话框中,选择“调试源文件”**,再添加存档源代码的目录。 否则,由于源文件的路径记录在 .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 更新时,尝试将调试器附加到应用程序版本 1。 您也可以使用 System.Diagnostics.Debugger.Break 方法,或在 Visual Basic 中只要使用 Stop 即可。 当然,您不应让这些方法调用留在成品代码中。
例如,假定您正在部署 Windows 窗体应用程序,并拥有内部带有更新逻辑的此方法的事件处理程序。 若要调试它,只需在按下按钮前附加,然后设置断点(确保打开相应的存档文件并在其中设置断点)。
仅当部署应用程序后才使用 IsNetworkDeployed 属性调用 System.Deployment.Application API;在 Visual Studio 中调试时不应调用这些 API。