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"

Предупреждение NU1007

Так что, кажется, просто использование "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: смешанная включающая минимальная и исключительная максимальная версии.
Другие вопросы по тегам