Отладка приложений 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.
Перед началом работы убедитесь, что файлы символов (PDB) и исходные файлы архивируются.
Разверните версию 1 приложения.
Создайте пустое решение. В меню Файл выберите Создать,а затем — Проект. В диалоговом окне "Новый проект" откройте узел "Другие типы проектов", а затем выберите папку "Решения Visual Studio". В области "Шаблоны" выберите "Пустое решение".
Добавьте архивное расположение источника в свойства для этого нового решения. В Обозреватель решений щелкните правой кнопкой мыши узел решения, а затем выберите пункт "Свойства". В диалоговом окне "Страницы свойств" выберите "Отладочные исходные файлы", а затем добавьте каталог архивированного исходного кода. В противном случае отладчик обнаружит устаревшие исходные файлы, так как пути к исходному файлу записываются в PDB-файле. Если отладчик использует устаревшие исходные файлы, появится сообщение о том, что источник не соответствует.
Убедитесь, что отладчик может найти PDB-файлы . Если вы развернули их с помощью приложения, отладчик находит их автоматически. Сначала он всегда выглядит рядом с сборкой. В противном случае необходимо добавить архивный путь к расположениям файла символов (PDB) (чтобы получить доступ к этому параметру, в меню "Сервис" выберите пункт "Параметры", а затем откройте узел отладки и щелкните "Символы").
Отладка того, что происходит между вызовами методов и
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
Разверните версию 2.
Попытайтесь подключить отладчик к приложению версии 1, пока он скачивает обновление для версии 2. Кроме того, можно использовать
System.Diagnostics.Debugger.Break
метод или простоStop
в Visual Basic. Конечно, эти вызовы метода не следует оставлять в рабочем коде.Например, предположим, что вы разрабатываете приложение Windows Forms, и у вас есть обработчик событий для этого метода с логикой обновления в нем. Чтобы выполнить отладку, просто вложите его перед нажатием кнопки, а затем установите точку останова (убедитесь, что откроется соответствующий архивированный файл и установите там точку останова).
IsNetworkDeployed Используйте свойство для вызова System.Deployment.Application API только в том случае, если приложение развертывается; API-интерфейсы не должны вызываться во время отладки в Visual Studio.