Можно ли автоматически обновлять пакеты Nuget после установки WinForms?

Допустим, у меня есть приложение для форм Windows с несколькими важными пакетами Nuget, которые необходимо обновлять.

Можно ли как-то программно обновлять пакеты Nuget из среды, не связанной с разработкой? Под средой, не связанной с разработкой, я имею в виду случайного пользователя, который запускает приложение WinForms (установив его на свой компьютер).

Я читал кое-что об использовании nuget.exe, но при обновлении пакетов nuget в папку установки должны помещаться файлы.dll.

2 ответа

Решение

Вы можете это сделать, но не должны этого делать. Пакеты NuGet зависят от разработки и не предназначены для произвольного обновления в уже скомпилированном приложении или на сайте клиента, поскольку

  • Вы не можете быть уверены, что ваше приложение будет работать с обновленными сборками, поскольку они могут вносить изменения, которые приведут к сбоям или неожиданному поведению во время выполнения.
  • Пакеты NuGet включают не только сборки, но также сценарии сборки и ресурсы, которые могут зависеть от MS Build или других инструментов, запускаемых в вашей среде разработки, для развертывания или даже включения в вашу собственную сборку, например встроенных ресурсов.
  • Пакеты имеют зависимости от сборок и других пакетов. Вам также нужно будет обновить зависимости, и есть большой потенциал, чтобы сломать что-нибудь с этим.
  • Вам нужно будет включить исполняемый файл NuGet CLI при отправке вашего приложения, а вашему клиенту потребуется разрешение на извлечение и установку пакетов.
  • Установка пакетов без предварительного тестирования может нанести вред качеству вашего приложения, а также вызвать проблемы с безопасностью. Помните, что вы можете иметь дело с исполняемыми файлами из потенциально общедоступного источника пакета.

При этом не делайте этого. Вместо этого следуйте ответственному циклу разработки программного обеспечения, при котором вы обновляете пакеты и тщательно тестируете свое приложение перед доставкой, а также часто предоставляете своим клиентам обновления всего приложения.

Тем не менее, в образовательных целях вы можете устанавливать пакеты локально с помощью инструментов Nuget CLI, в этом примереnuget.exe. Вам нужно указать идентификатор пакета, выходной каталог и структуру, напримерnet472для.NET Franmework 4.7.2. Это приведет к извлечению содержимого, а также самого пакета в выходную папку в структуре папок пакета, которая не будет соответствовать вашей целевой структуре каталогов. Оттуда вам нужно будет скопировать необходимые активы в каталог установки, например, с помощью сценария копирования. Помимо того, что это неправильно, это очень обременительно и, скорее всего, считается неудачным.

nuget install <PackageId> -OutputDirectory <OutputDirectory> -Framework <Framework>

Если это автоматическое обновление, подумайте, поддерживается ли какой-то метод в старой версии dll, а в новой версии он был удален.

Хотя вы можете обновить пакет во время сборки.

Включите автоматическое восстановление пакетов, выбрав Инструменты> Параметры> Диспетчер пакетов NuGet, а затем выбрав Автоматически проверять отсутствие пакетов во время сборки в Visual Studio в разделе Восстановление пакетов.

Ссылка: https://docs.microsoft.com/en-us/nuget/consume-packages/package-restore

Другие вопросы по тегам