зависимости спецификации nuget, получить последнюю версию?

В документах по версиям nuspec я вижу

1.0  = 1.0 ≤ x
(,1.0]  = x ≤ 1.0
(,1.0)  = x < 1.0
[1.0] = x == 1.0
(1.0) = invalid
(1.0,) = 1.0 < x
(1.0,2.0) = 1.0 < x < 2.0
[1.0,2.0] = 1.0 ≤ x ≤ 2.0
empty = latest version.

У меня есть packages.config, который выглядит так

<packages>
  <package id="psake" version="4.2.0.1" />
</packages>

и я хотел бы изменить версию на «последнюю».

я пробовал оба

<packages>
  <package id="psake" version="" />
</packages>

и

<packages>
  <package id="psake" />
</packages>

но оба приводят к Unable to parse version value '' from 'packages.config'.

Я использую Nuget.exe 2.8.2


person George Mauer    schedule 15.07.2014    source источник


Ответы (4)


Начиная с Nuget 2.8 вы можете добавить следующий атрибут в свой nuget.config

<configuration>
    <config> 
        <add key="dependencyversion" value="Highest" /> 
    </config>
</configuration>

При разрешении ваших пакетов будет разрешена последняя версия этого пакета. Другие атрибуты включают HighestMinor, HighestPatch и самый низкий (на основе семантического управления версиями).

Источник: http://docs.nuget.org/docs/release-notes/nuget. -2,8

person Joseph Devlin    schedule 13.10.2014
comment
куда ведет эта запись? мой nuget.config имеет следующее: ‹?xml version=1.0 encoding=utf-8?› ‹configuration› ‹solution› ‹add key=disableSourceControlIntegration value=true /› ‹/solution› ‹/configuration› - person learnerplates; 30.04.2015
comment
@learnerplates Я обновил ответ, чтобы дать вам некоторый контекст. По сути, вы просто добавляете этот раздел под конфигурацией. Если у вас есть еще вопросы, не стесняйтесь спрашивать - person Joseph Devlin; 30.04.2015
comment
Добавление этого ничего для нас не меняет. NuGet просто использует ту же жестко закодированную версию, что и всегда. Что мы можем здесь упустить? - person tomwaitforitmy; 15.03.2021

Я предполагаю, что вы пытаетесь использовать установку nuget или восстановление nuget для извлечения пакета NuGet с помощью NuGet.exe.

Атрибут версии в packages.config определяет версию, установленную в проекте или решении.

Чтобы получить последнюю версию пакета psake NuGet, вам необходимо установить его с помощью консоли диспетчера пакетов или диалогового окна «Управление пакетами» или зная точную версию пакета, добавив ее в файл packages.config и используя восстановление пакета. . Поскольку psake является пакетом уровня решения, он не обновляет ваш проект, последний вариант возможен.

Диапазоны версий используются для ограничения версий пакетов, которые разрешено устанавливать в вашем проекте.

<packages>
    <package id="SomePackage" version="2.1.0" allowedVersions="[2,3)" />
</packages>
person Matt Ward    schedule 15.07.2014
comment
Да, это все на уровне решения, это не имеет ничего общего с восстановлением пакета, это скрипт, запускаемый непосредственно из моего CI, который в основном настраивает среду для моих инструментов сборки на следующем этапе сборки. Я в основном делаю ./.nuget\NuGet.exe install ./.nuget\packages.config. Вопрос в том, что спецификация означает empty = latest version.? Я попробовал оба варианта empty, которые только мог придумать, и получил ошибки синтаксического анализа от обоих. - person George Mauer; 16.07.2014
comment
empty = latest version - это относится к диапазону версий. Он используется в пакете/@allowedVersions или в зависимости/@version. Пусто здесь эквивалентно отсутствию атрибута. Таким образом, это означает, что пакет может быть обновлен до любой более поздней версии, или зависимость может быть любой версии. package/@version не поддерживает диапазон версий. Чтобы получить желаемое поведение, я подозреваю, что вам нужно будет написать собственную утилиту. - person Matt Ward; 16.07.2014
comment
Я хочу, чтобы пакет обновлялся до любой более поздней версии, как вы говорите. Однако, когда я полностью отключаю атрибут, я все равно получаю эту ошибку синтаксического анализа - person George Mauer; 16.07.2014
comment

В качестве альтернативы вы можете запустить restore для произвольной версии, а затем update в соответствии с https://docs.nuget.org/consume/command-line-reference. Чтобы обеспечить последнюю версию, вам нужно будет повторно запустить update.

Обновите пакеты до последних доступных версий. Эта команда также обновляет сам NuGet.exe. Обратите внимание, что для запуска команды Update требуется наличие папки Packages. Рекомендуемый способ — запустить команду восстановления NuGet.exe перед запуском команды обновления.

person KCD    schedule 07.07.2015
comment
Извините, но это на самом деле не отвечает на то, что я спрашивал. Речь идет не о том, как обновиться до последней версии, а о том, как указать последнюю версию, разве это неясно в вопросе? - person George Mauer; 08.07.2015
comment
Я забыл сказать в ответе, что это просто альтернатива, не совсем то, что вам нужно, но может подойти другим людям. Результат тот же, не так ли? - person KCD; 09.07.2015
comment
На самом деле это не так, спецификация представляет собой инструкции для менеджера пакетов о том, что делать при обновлении. На самом деле запуск команды обновления совсем другой. - person George Mauer; 10.07.2015

Вы можете изменить свой файл .cspoj, чтобы выполнить цель «BeforeBuild» следующим образом:

<Target Name="BeforeBuild"> <Exec Command="&quot;$(SolutionDir).nuget\NuGet&quot; update &quot;$(ProjectDir)packages.config&quot; -Id psake" /> </Target>

Обратите внимание: вам понадобится «Nuget.exe» в каталоге вашего решения.

person Shafaet Karim    schedule 14.04.2015
comment
Спасибо, Шафает, но вопрос явно не в этом. Он спрашивает о спецификации версии. - person George Mauer; 14.04.2015