project.json указывает точную версию зависимости NuGet
При использовании packages.config
файл для указания зависимостей NuGet. Я могу предоставить атрибут allowVersions, чтобы указать строку SemVer, определяющую диапазон версий, которые я хочу обновить. Используя []
В настоящее время я могу эффективно прикрепить свой пакет к одной версии. Например:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Common.Logging" version="3.3.0" allowedVersions="[3.3.0, 3.3.0]" />
</packages>
Теперь, когда в основных проектах.net мы имеем project.json
чтобы указать зависимости NuGet (какими бы кратковременными они ни были), как я могу прикрепить зависимость NuGet к такой версии, чтобы dotnet restore
не обновляет мое приложение до новой версии, доступной из моего источника пакета?
{
"version": "1.0.0-*",
"dependencies": {
"NETStandard.Library": "1.6.0",
"Newtonsoft.Json": "9.0.1" //how can i pin to 9.0.1 ??
},
}
Рисунок №2 в этой документации nuget явно подразумевает, что это возможно, но не предоставляет синтаксиса для этого.
-- ОБНОВИТЬ --
Я протестировал это с двумя библиотеками классов ядра.net и моей локальной файловой системой в качестве хранилища пакетов. Я создал библиотеку классов под названием UpdateMeDependencyLib
и упаковал его как v1.0.0, и я использовал его из второго проекта через Nuget. Ниже приведен файл project.json из библиотеки 2-го класса. UpdateMeDependencyLib
{
"version": "1.0.0-*",
"dependencies": {
"NETStandard.Library": "1.6.0",
"UpdateMeDependencyLib": "1.0.0"
},
"frameworks": {
"netstandard1.6": {
"imports": "dnxcore50"
}
}
}
Я тогда обновил UpdateMeDependencyLib
до версии 1.1.0 и переупакована, так что теперь в моей локальной системе есть пакет nuget v1.0.0 и v1.1.0. После создания v1.1.0 из UpdateMeDependencyLib
Теперь я получаю следующий опыт
- Компиляция проекта в Visual Studio (без изменений в потребительском project.json), который потребляет
UpdateMeDependencyLib
выводит v1.1.0 в каталог bin- Если я принудительно восстановлю пакет в библиотеке-потребителе, я получу предупреждение Nuget: "Указана зависимость NU1007: UpdateMeDependencyLib >= 1.0.0, но в результате возникла UpdateMeDependencyLib 1.1.0"
Так что, кажется, просто использование "1.0.0" в моей потребляющей библиотеке не закрепляет его, и оно будет автоматически обновляться при появлении новой версии в моем источнике NuGet.
3 ответа
Чтобы зафиксировать конкретную версию, поместите номер версии в квадратные скобки.
"UpdateMeDependencyLib": {
"version": "[1.0.0]",
"target": "package"
}
Вам нужно будет сделать восстановление пакетов после обновления.
Вы должны использовать следующие обозначения для вашей ссылки
"UpdateMeDependencyLib": {
"version": "1.0.0",
"target": "package"
}
Поскольку оба проекта находятся в одном решении, система не использует локальное хранилище пакетов для разрешения зависимости. Он напрямую использует проект в качестве ссылки. Поскольку ссылка 1.0.0 больше не существует в решении, (и потому что "UpdateMeDeepencyLib": "1.0.0"
означает>= 1.0.0), он использует правило Nuget "Самая низкая применимая версия" и разрешает зависимость, ссылаясь на проект 1.1.0. Обратите внимание, что значок UpdateMeDependencyLib в дереве зависимостей не является пустым.
Что я не могу понять, так это то, как мы можем строго установить зависимость на 1.0.0 и, в этом случае, сломать сборку.
Вот как вы это делаете:
{
"dependencies": {
"NETStandard.Library": "1.6.0",
"Newtonsoft.Json": {
"version": "[9.0.1]",
"target": "package"
}
}
}
Это поддерживаемый синтаксис для диапазонов версий :
-
1.0
: x ≥ 1.0: Минимальная версия включительно. -
(1.0,)
: x > 1.0: Минимальная версия, эксклюзивная -
[1.0]
: x == 1.0: точное соответствие версии -
(,1.0]
: x ≤ 1.0: Максимальная версия включительно. -
(,1.0)
: x < 1.0: Максимальная версия, эксклюзивная -
[1.0,2.0]
: 1,0 ≤ x ≤ 2,0: Точный диапазон включительно. -
(1.0,2.0)
: 1,0 < x < 2,0: Точный диапазон, исключительный -
[1.0,2.0)
: 1,0 ≤ x < 2,0: смешанная включающая минимальная и исключительная максимальная версии.