Как можно "восстановить nuget" загружать пакеты перед выпуском?

Мы столкнулись с проблемой в нашей среде сборки, где мы хотели бы, чтобы наши сборки непрерывной интеграции загружали "последние и самые большие" пакеты NuGet, которые помечены как предварительные выпуски, путем надлежащего добавления номера версии с помощью -dev.

Всякий раз, когда мы запускаем команду nuget restore, она не может забрать какие-либо предварительные версии. Я просмотрел документацию на странице NuGet Versioning, но довольно неудобно опускает подробные сведения о том, как добавить диапазоны предварительного доступа к разрешенным версиям, которые он должен загрузить в файле packages.config.

В настоящее время файл packages.config выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Foo" version="1.0.0" targetFramework="net35" />
</packages>

И мы хотим, чтобы NuGet, по крайней мере, смог увидеть, а затем выбрать последнюю версию из списка, например:

  • Foo.1.0.0-dev1401291727ef87505.nupkg
  • Foo.1.0.0-dev14012918064fdf488.nupkg

К сожалению, никаких предварительных версий не видно, и только восстановленные пакеты используются процессом восстановления. Типичное сообщение об ошибке при попытке загрузить пакет с предварительным выпуском:

Unable to find version '1.0.0' of package 'Foo'.

Есть ли способ указать диапазон версий, который включает в себя пакеты перед выпуском в файле packages.config? Или даже из самого файла .nuspec?

Большое спасибо заранее.

Ответ 1

Нет никакого способа, чтобы AFAIK указывал использовать пакеты перед выпуском в пределах packages.config. Вместо этого используйте флаг -InstallPrerelease (PowerShell) или Prerelease (command-line nuget.exe), чтобы указать, что пакеты перед выпуском/бета-версиями должны быть установлены в соответствии с стабильными пакетами.

Обратите внимание, что Foo.1.0.0-dev1234 считается раньше, чем Foo.1.0.0, поэтому, если стабильный пакет существует (Foo.1.0.0), то пакеты Foo.1.0.0-xxxx beta/pre-release не будут установлены. В таком случае вам нужно обновить бета-версию до (скажем) Foo.1.0.1-devxxxx, чтобы ее можно было найти как "более новую", чем Foo.1.0.0.

Подробнее см. здесь Как опубликовать пакет версии nuget preerelease

Ответ 2

Чтобы указать предварительную версию, обязательно отметьте ее в версии package.config:

<package id="Foo" version="1.0.0-dev1401291727ef87505" />

Диапазоны версий задаются с помощью атрибута allowedVersions.

Чтобы проверить наличие обновлений пакетов предварительного доступа (не только стабильных), в диалоговом окне "Управление пакетами NuGet" выберите "Включить предварительную проверку" в раскрывающемся списке "Стабильный".

Ответ 3

nuget.exe restore загрузит точную версию, указанную в файле packages.config. Вам нужно будет использовать update-package для обновления установленных пакетов до последней версии.