Поделиться через


Отладка ClickOnce-приложений, использующих System.Deployment.Application

В Visual Studio развертывание ClickOnce позволяет настраивать способ обновления приложения. Но если нужно использовать и настроить дополнительные функции развертывания ClickOnce, потребуется доступ к объектной модели развертывания, предоставляемой объектом System.Deployment.Application. Интерфейсы API System.Deployment.Application можно использовать для некоторых дополнительных задач:

  • Создание параметра "Обновить сейчас" в приложении.

  • Условные загрузки по требованию различных компонентов приложения

  • Обновления, непосредственно встроенные в приложение

  • Обеспечение того, что клиентское приложение всегда является обновленным

Поскольку интерфейсы API System.Deployment.Application работают, если только приложение развертывается при помощи технологии ClickOnce, единственным способом их отладки является развертывание приложения при помощи 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. В качестве альтернативы можно использовать метод System.Diagnostics.Debugger.Break или Stop в Visual Basic. Конечно, нельзя оставлять эти вызовы методов в производственном коде.

    Например, предположим, что ведется разработка приложения Windows Forms и имеется обработчик событий для этого метода с содержащейся в нем логикой обновления. Для отладки этого приложения просто выполните прикрепление перед нажатием кнопки, затем установите точку останова (убедитесь в том, что открыт нужный архивный файл и точка останова установлена в нем).

Используйте свойство IsNetworkDeployed для вызова интерфейсов API System.Deployment.Application только при развертывании приложения; интерфейсы API не должны вызываться во время отладки в Visual Studio.

См. также

Ссылки

System.Deployment.Application