2014-01-30 3 views
10

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

Всякий раз, когда мы запускаем команду 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?

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

+0

Какую версию клиента NuGet вы используете? Что такое серверное программное обеспечение (NuGet Gallery? Artifactory? MyGet? ProGet?) Это не просто использование флага '-IncludePrerelease'? –

+0

Мы используем клиентскую версию NuGet 2.7.41115.310. На стороне сервера у нас есть простой файловый ресурс, настроенный на нашем сервере сборки. Это скорее случай, когда можно предоставить номер базовой версии в нашем файле package.config, а для NuGet - оттуда. Если мы укажем номер версии non-tagged/release в файле packages.config, даже с 'IncludePrerelease', он не будет обновлен до пакета перед выпуском, из теста, который я сделал до сих пор. –

ответ

10

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

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

Смотрите здесь для получения более подробной информации: How to publish nuget prerelease version package

+0

Предложения для PowerShell и nuget.exe будут получать только последний предварительный выпуск. Вы не можете настроить таргетинг на предварительную версию для определенной версии. Я думаю, что я застрял в этом сценарии. См. Https://github.com/NuGet/Home/issues/503 – DannyMeister

0

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

1

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

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

версии определяются с помощью атрибута allowedVersions.

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

Смежные вопросы