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

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

  • Создание параметра Update Now в приложении

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

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

  • Обеспечение актуальности клиентского приложения

    System.Deployment.Application Так как API работают только при развертывании приложения с помощью технологии ClickOnce, единственным способом их отладки является развертывание приложения с помощью ClickOnce, присоединение к нему, а затем отладка. Достаточно рано подключить отладчик может быть сложно, так как этот код часто запускается при запуске и выполнении приложения, прежде чем подключить отладчик. Решение заключается в том, чтобы поместить разрывы (или остановки для проектов Visual Basic) перед обновлением проверка кода или кода по запросу.

    Рекомендуемая методика отладки выглядит следующим образом:

Примечание.

Класс ApplicationDeployment и API в System.Deployment.Application пространстве имен не поддерживаются в .NET Core и .NET 5 и более поздних версиях. В .NET 7 поддерживается новый метод доступа к свойствам развертывания приложения. Дополнительные сведения см. в разделе "Свойства развертывания Access ClickOnce" в .NET. .NET 7 не поддерживает эквивалент методов ApplicationDeployment.

  1. Перед началом работы убедитесь, что файлы символов (PDB) и исходные файлы архивируются.

  2. Разверните версию 1 приложения.

  3. Создайте пустое решение. В меню Файл выберите Создать,а затем — Проект. В диалоговом окне "Новый проект" откройте узел "Другие типы проектов", а затем выберите папку "Решения Visual Studio". В области "Шаблоны" выберите "Пустое решение".

  4. Добавьте архивное расположение источника в свойства для этого нового решения. В Обозреватель решений щелкните правой кнопкой мыши узел решения, а затем выберите пункт "Свойства". В диалоговом окне "Страницы свойств" выберите "Отладочные исходные файлы", а затем добавьте каталог архивированного исходного кода. В противном случае отладчик обнаружит устаревшие исходные файлы, так как пути к исходному файлу записываются в PDB-файле. Если отладчик использует устаревшие исходные файлы, появится сообщение о том, что источник не соответствует.

  5. Убедитесь, что отладчик может найти PDB-файлы . Если вы развернули их с помощью приложения, отладчик находит их автоматически. Сначала он всегда выглядит рядом с сборкой. В противном случае необходимо добавить архивный путь к расположениям файла символов (PDB) (чтобы получить доступ к этому параметру, в меню "Сервис" выберите пункт "Параметры", а затем откройте узел отладки и щелкните "Символы").

  6. Отладка того, что происходит между вызовами методов и Download/Update методом.CheckForUpdate

    Например, код обновления может быть следующим:

        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 Используйте свойство для вызова System.Deployment.Application API только в том случае, если приложение развертывается; API-интерфейсы не должны вызываться во время отладки в Visual Studio.